我的 sonata_type_model_list 和继承实体存在问题。
我有这些实体
/**
* @ORM\Entity()
*/
class Contract
{
/**
* @var Provider
*
* @ORM\ManyToOne(targetEntity="Provider")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="provider_id", referencedColumnName="id")
* })
*/
private $provider;
...
}
和
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
/**
* User
*
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="user_type", type="string")
* @ORM\DiscriminatorMap(
* {
* "app_user" = "User",
* "provider" = "AppBundle\Entity\Provider",
* }
* )
* @ORM\Table(name="fos_user_user", options={"charset"="utf8", "collate"="utf8_bin"})
*/
class User extends BaseUser
{
和提供者实体
namespace AppBundle\Entity;
use Application\Sonata\UserBundle\Entity\User;
/**
* @ORM\Entity()
*/
class Provider extends User
{
我做了ContractAdmin
admin.contract:
class: AppBundle\Admin\ContractAdmin
arguments: [~, AppBundle\Entity\Contract, ~]
tags:
- { name: sonata.admin, manager_type: orm, label: label.contracts, group: label.contracts }
calls:
- [setTranslationDomain, [SonataAdminBundle]]
和
use Sonata\AdminBundle\Admin\AbstractAdmin;
class ContractAdmin extends AbstractAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper->add(
'provider',
'sonata_type_model_list',
[
'class' => 'AppBundle\Entity\Provider',
],
当我尝试添加提供商时,我收到了错误
处理时抛出了异常:无法调用方法 (“id”)在null变量中 “SonataDoctrineORMAdminBundle:Form:form_admin_fields.html.twig”at at 第59行
我想搜索并仅将提供者用户添加到Contract实体。 Sonata找不到Provider或User实体(NULL),我无法弄清楚如何在ContractAdmin中连接它。
我可以在这做什么?
提前致谢。
答案 0 :(得分:0)
我的解决方案是EntityType :: class并避免使用Sonata类型。它工作正常。
class ContractAdmin extends AbstractAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper->add(
'provider',
EntityType::class,
[
'class' => 'AppBundle\Entity\Provider',
'choice_label' => 'username',
'attr' => array(
'data-sonata-select2' => 'true'
)
],
但我不知道为什么索纳塔有麻烦。如果有人有解释或更好的解决方案,请写在这里。