扩展用户实体

时间:2015-01-21 12:22:13

标签: symfony fosuserbundle symfony-sonata

我试图扩展奏鸣曲用户包的用户实体,但它总是失败(至少当我想使用带有奏鸣曲管理包的ist时)。如果我使用Application / Sonata / UserBundle / Entity / User Entity,它可以工作,我可以在仪表板中编辑它。

我的实体看起来像这样:

<?php

namespace MyNamespace\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\EntityManager;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;

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

在我的config.yml中,我定义了以下选项:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class:     MyNamespace\MyBundle\Entity\User
    group:
        group_class:   Application\Sonata\UserBundle\Entity\Group
        group_manager: sonata.user.orm.group_manager
    service:
    user_manager: sonata.user.orm.user_manager 

sonata_user:
security_acl: true
manager_type: orm
class:
   user: MyNamespace\MyBundle\Entity\User

登录正常,但我收到错误消息

&#34;在呈现模板期间抛出了异常(&#34;无法生成指定路由的URL&#34; admin_sonata_user_user_create&#34;因为此类路由不存在。&#34 ;)在SonataAdminBundle:Block:第39行的block_admin_list.html.twig。&#34;

我的routing.yml看起来像这样:

admin:
    resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
    prefix: /

_sonata_admin:
    host:       www.mydomain.com
    resource: .
    type: sonata_admin
    prefix: /
    schemes:    [https]

即使我一步一步地遵循本教程(Extending Sonata User Bundle and adding new fields),我也会遇到同样的错误。

1 个答案:

答案 0 :(得分:1)

Application/Sonata/UserBundle/Entity/User已延长Sonata/UserBundle/Entity/User,为什么不只是在那里进行更改而不是另一个类?

它已经扩展了捆绑,因此您可以在那里进行所有更改。我把其他字段放在那里。

我的文件Application / Sonata / UserBundle / Entity / User.php就像:

namespace Application\Sonata\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;

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

    /**
     * @var string
     */
    private $company;

如果您真的想要使用其他课程,则需要注意路由。

检查\vendor\sonata-project\user-bundle\Resources\config\admin_orm.xml - 这是将原始类添加为服务的位置。

您可以看到%sonata.user.admin.user.entity%参数 - 如果要更改为其他类,可以在config中更改此参数。我认为这比改变fos_user.user_class更好。

您也可以将整个文件移至Application/Sonata/UserBudle,但之后需要将其加载到DependencyInjection/ApplicationSonataUserExtension.php

顺便说一句,这在Sonata中非常棘手,用户捆绑为Paweł编写并进行大量调试以使其正常工作