Extending Sonata User Bundle and adding new fields

1. Create a new bundle

Something like AcmeUserBundle. Create it and register it as you do normally.

2. Create a new User entity

Then create a User and Group entity which extends Sonata\UserBundle\Entity\BaseUser andSonata\UserBundle\Entity\BaseGroup. You should also add the configuration for the primary key, for instance:
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;
}

3. Configure the entity

then, go to your app/config/config.yml file and configure these new entities:
sonata_user:
    class:
        user: Acme\UserBundle\Entity\User
        group: Acme\UserBundle\Entity\Group

4. Override the UserAdmin class

Then, you need to create a new UserAdmin class. To do this, just create a new UserAdmin class inside your bundle, extend Sonata\UserBundle\Admin\Model\UserAdmin and override the methods like this:
namespace Acme\UserBundle\Admin;

use Sonata\UserBundle\Admin\Model\UserAdmin as SonataUserAdmin;

class UserAdmin extends SonataUserAdmin
{
    /**
        * {@inheritdoc}
        */
    protected function configureFormFields(FormMapper $formMapper)
    {
        parent::configureFormFields($formMapper);

        $formMapper
            ->with('new_section')
                ->add(...)
                // ...
            ->end()
        ;
    }
}

5. Replace the old UserAdmin class

Then, you need to make sure Sonata uses the new UserAdmin class. You just need to set thesonata.user.admin.user.class parameter to your new class and your ready!
# app/config/config.yml
parameters:
    sonata.user.admin.user.class: Acme\UserBundle\Admin\UserAdmin

评论

热门博文