I am trying to override the default FOSUserBundle.en.yml from the FOS user-bundle.
I have the user bundle working fine, i have registered a user and logged in.
However when I copy the FOSUserBundle.en.yml into my own UserBundle to override the wording Symfony doesn't seem to pick it up.
This is the path I have copied the transation file to:
src/Blogger/UserBundle/Resources/translations/FOSUserBundle.en.ym
But no joy.. I have cleared the caches tried another browser but the change in the override will not come through.
I can place the change the in the original and see the changes:
vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/translations/FOSUserBundle.en.yml
Am I missing something?
Thanks,
John
To override the bundle, you should add this :
// src/Blogger/UserBundle/BloggerUserBundle.php
namespace Blogger\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class BloggerUserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
Here's a link from the docs : http://symfony.com/doc/current/cookbook/bundles/inheritance.html
All the steps you should follow are in there.
Related
I have create a new bundle for my vendor.
I have my bundle, i add it in appkernel, in routing.yml, but i have this error :
Class '...\TestBundle' not found in /.../AppKernel.php on line 23
When i click on my testbundle in appkernel, that return me my php 'testbundle'
class TestBundle extends Bundle
{
}
I have found the problem, i have forgot to add it in git, now its ok that work nice
just a little question:
I have a vendor bundle e.g. SonataBasketBundle with some views.
I extended it by SonataEasyExtend in my src/Application/SonataBasketBundle folder.
PROBLEM: I would to override vendor views, and I use the classical two methods: copy all views files in src/Application/SonataBasketBundle/Resources/views or copy them in app/Resources/SonataBasketBundle/views.
But, unfortunately, both methods do not works. What's the possible problem?
I missed some configuration?
I made a little test:
my extended bundle is named "ApplicationSonataBasketBundle".
Now, if in the vendor basket index method, I change the view name this way
return $this->render('ApplicationSonataBasketBundle:Basket:index.html.twig',
array(
'basket' => $this->get('sonata.basket'),
'form' => $form->createView(),
));
the framework load the application bundle view, as I want.
But, if the application bundle extends the vendor one (SonataBasketBundle), doesn't should be loaded by default also with name SonataBasketBundle?
Thanks in advance.
Override view file by pasting correct view files in
app/Resources/bundle/views
then clearing cache afterward by console
php app/console ca:cl
or delete cache files manually from app/cache (Better)
symfony doc
when overriding child bundle, it is good to override the controllers as well as the templates
<?php
// src/Acme/UserBundle/AcmeUserBundle.php
namespace Acme\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeUserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
I have extended the Sonata UserAdmin by creating Application\Sonata\UserBundle\Admin\Model\UserAdmin and extending Admin, then commenting out some fields I would rather not display.
From sonata_user in config.yml:
admin: # Admin Classes
user:
class: Application\Sonata\UserBundle\Admin\Entity\UserAdmin
controller: SonataAdminBundle:CRUD
translation: SonataUserBundle
Where is the template for the form which gets displayed at /admin/sonata/user/user/{id}/editand what are the steps required to override it?
The templates for your forms are in vendor/Sonata/...Resources/views
There are two ways to override these templates. The easiest is to override an individual template by creating it at app/Resources/PATH/view.html.twig.
PATH => the path to access the view you override in vendor, you have to recreate it. I said view.html.twig, but it can be another name, just need to be the same.
So the same way you did with the UserAdmin entity, but in the resources.
The other way is in the case you did your own bundle, that will be the son of one of your vendors bundle.
To get more information, FOSUserBundle documentation is great about how to override things from a parent bundle.
Check this : https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_templates.md
There is also doc on how to override form & controllers.
Good luck !
Override getTemplate method in UserAdmin class:
public function getTemplate($name)
{
switch ($name) {
case 'edit':
return 'Application\Sonata:User:edit.html.twig';
break;
default:
return parent::getTemplate($name);
break;
}
}
and create Application\Sonata\Resources\views\User\edit.html.twig that will override Sonata's template:
{# edit.html.twig #}
{% extends 'SonataAdminBundle:CRUD:edit.html.twig' %}
And now you can override the blocks from SonataAdminBundle:CRUD:edit.html.twig as you want.
IS there a simple way to disable some CRUD actions for given admin class? E.g. I just want a list of users added via front-end without the option to manually add them.
In your admin class :
protected function configureRoutes(RouteCollection $collection)
{
// to remove a single route
$collection->remove('delete');
// OR remove all route except named ones
$collection->clearExcept(array('list', 'show'));
}
Also use routeCollection at top of admin class
use Sonata\AdminBundle\Route\RouteCollection;
Docs : http://sonata-project.org/bundles/admin/master/doc/reference/routing.html#removing-a-single-route
So I read alot about the overriding of templates and such and overriding of bundles in Symfony.
I am using the new Symfony 2.3, I have not tried this in lower versions of Symfony.
I followed the tutorial about overriding bundles in Symfony:
http://symfony.com/doc/2.3/cookbook/bundles/inheritance.html
I followed the tutorial about overriding the controllers of FOSUserBundle, which is the same thing really:
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md
I had a bundle named Acme/WebBundle.
Now I have done the following things:
Created a new bundle named Acme/UserBundle.
Created the file AcmeUserBundle.php in this bundle.
<?php
namespace Acme\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeUserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
Created the following file structure:
-src
-Acme
-UserBundle
-Controller
RegistrationController.php
-Entity
User.php
-Resources
-translations
-views
AcmeUserBundle.php
In RegistrationController.php I set the namespace to:
namespace Acme\UserBundle\Controller;
Copied the contents of the registration controller of FOSUserBundle to mine.
Added to the beginning of registerAction()
die("message");
Now when I go to the registration form, the default /register route, I don't get a die, everything works fine. It does not see my bundle as a child, nothing is overridden and I've been trying to get it to work for ages hence my question here.
Did I do something wrong?
Remember that you need to add any new bundle to AppKernel::registerBundles() in app/AppKernel.php like this:
$bundles = array(
...
new Acme\UserBundle()
);