扩展用户实体
Extending the User entity
我正在尝试扩展 sonata 用户包的用户实体,但它总是失败(至少当我想将 ist 与 sonata 管理包一起使用时)。如果我使用 Application/Sonata/UserBundle/Entity/User 实体,它可以工作,我可以在仪表板中编辑它。
我的实体看起来像这样:
<?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
登录正常,但随后收到错误消息
"An exception has been thrown during the rendering of a template ("无法为命名路由 "admin_sonata_user_user_create" 生成 URL,因为这样的路由不存在。”) 在 SonataAdminBundle:Block:block_admin_list.html.twig 中第 39 行。
我的 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) 一步一步来,我也会遇到同样的错误。
Application/Sonata/UserBundle/Entity/User
已扩展 Sonata/UserBundle/Entity/User
那么为什么不只在那里进行更改而不是另一个 class?
它已经是扩展包,因此您可以在那里进行所有更改。我把额外的字段放在那里。
我的文件 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;
如果你真的想使用另一个 class 你需要注意路由。
勾选\vendor\sonata-project\user-bundle\Resources\config\admin_orm.xml
- 这是原来的class添加为服务的地方。
您可以在那里看到 %sonata.user.admin.user.entity% 参数 - 如果您想更改为另一个 class,您可以在配置中更改它。我认为这比更改 fos_user.user_class.
更好
您也可以将整个文件移动到您的 Application/Sonata/UserBudle
,但您需要将其加载到 DependencyInjection/ApplicationSonataUserExtension.php
顺便说一句,这在 Sonata 中真的很棘手,用户按照 Paweł 编写的那样进行捆绑,并进行了大量调试才能使其正常工作
我正在尝试扩展 sonata 用户包的用户实体,但它总是失败(至少当我想将 ist 与 sonata 管理包一起使用时)。如果我使用 Application/Sonata/UserBundle/Entity/User 实体,它可以工作,我可以在仪表板中编辑它。
我的实体看起来像这样:
<?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
登录正常,但随后收到错误消息
"An exception has been thrown during the rendering of a template ("无法为命名路由 "admin_sonata_user_user_create" 生成 URL,因为这样的路由不存在。”) 在 SonataAdminBundle:Block:block_admin_list.html.twig 中第 39 行。
我的 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) 一步一步来,我也会遇到同样的错误。
Application/Sonata/UserBundle/Entity/User
已扩展 Sonata/UserBundle/Entity/User
那么为什么不只在那里进行更改而不是另一个 class?
它已经是扩展包,因此您可以在那里进行所有更改。我把额外的字段放在那里。
我的文件 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;
如果你真的想使用另一个 class 你需要注意路由。
勾选\vendor\sonata-project\user-bundle\Resources\config\admin_orm.xml
- 这是原来的class添加为服务的地方。
您可以在那里看到 %sonata.user.admin.user.entity% 参数 - 如果您想更改为另一个 class,您可以在配置中更改它。我认为这比更改 fos_user.user_class.
更好您也可以将整个文件移动到您的 Application/Sonata/UserBudle
,但您需要将其加载到 DependencyInjection/ApplicationSonataUserExtension.php
顺便说一句,这在 Sonata 中真的很棘手,用户按照 Paweł 编写的那样进行捆绑,并进行了大量调试才能使其正常工作