It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center




已关闭8年。




我正在扩展Sonata用户捆绑包,并在新的用户实体中创建一些额外的字段。这些字段只会在用户下方的Sonata管理区域内更新,因此不需要在编辑配置文件表单中使用。我在通过Sonata用户管理器更新这些字段时遇到了麻烦,并尝试了几种不同的方法来扩展/实现Application\Sonata\UserBundle中的该类。以前有没有人遇到过这个问题,并且可以给我提供扩展新User实体的最简洁方法的教程或分步过程?

最佳答案

1.创建一个新的捆绑包

类似于AcmeUserBundle。创建它并像平常一样注册。

2.创建一个新的用户实体

然后创建一个UserGroup实体,该实体扩展了Sonata\UserBundle\Entity\BaseUserSonata\UserBundle\Entity\BaseGroup。您还应该添加主键的配置,例如:

/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;
}

3.配置实体

然后,转到您的app/config/config.yml文件并配置以下新实体:
sonata_user:
    class:
        user: Acme\UserBundle\Entity\User
        group: Acme\UserBundle\Entity\Group

4.覆盖UserAdmin类

然后,您需要创建一个新的UserAdmin类。为此,只需在包中创建一个新的UserAdmin类,扩展Sonata\UserBundle\Admin\Model\UserAdmin并覆盖如下方法:
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.替换旧的UserAdmin类

然后,您需要确保Sonata使用新的UserAdmin类。您只需要将sonata.user.admin.user.class参数设置为新类就可以了!
# app/config/config.yml
parameters:
    sonata.user.admin.user.class: Acme\UserBundle\Admin\UserAdmin

关于php - 扩展Sonata用户捆绑包并添加新字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15621993/

10-10 05:27