【发布时间】:2017-09-19 20:20:01
【问题描述】:
我正在使用内置 Symfony3 服务创建表单:
1) 在 AppBundle\Form 中创建新类,扩展 AbstractType
2)在我的控制器中创建一个表单对象(使用createForm())
3)将该对象直接推到树枝层(createView())
在我的实体方向上,我有两个类,已经通过 ORM 映射到数据库。
第一个是User,第二个是UserAttribute。 User 通过 OneToMany 注释与 UserAttribute 相关联。关系如下:
class UserAttr
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="userAttr" )
* @ORM\JoinColumn(nullable=false)
*/
private $user;
从User 方面:
class User
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="UserAttr", mappedBy="user")
* @ORM\JoinColumn(nullable=false)
*/
private $userAttr;
当我添加新字段(使用$builder->add())时,如果它们与User 类属性相关联,则一切正常。但是如果我对UserAttribute 属性做同样的事情 - symfony 找不到该属性的 get/set 方法。我知道 - 我可以通过 class User extends UserAttribute 修复它,但可能不是重点。 Symfony 必须有另一种解决方案,可能我错过了什么。
感谢您的宝贵时间!
// SOLVED | there should be defined an EntityClassType as below:
$builder->add('credit',EntityType::class,array(
'class' => UserAttr::class
));
【问题讨论】:
-
你们的关系怎么样?许多
User与单个UserAttribute相关联,反之亦然? -
感谢您的反馈,我对代码进行了一些更改并在上面进行了更新。现在我有了:User--->OneToMany--->UserAttr,和反面 UserAttr--->ManyToOne--->User
-
您想从用户表单中添加/修改关联
UserAttr属性的数量吗? -
不完全是,我只是想在我的表单中添加名为 credit 的新字段(这是
UserAttr属性,而不是User)。我可以使用添加的“信用”字段呈现该表单,但在提交后出现新错误:Neither the property "credit" nor one of the methods "getCredit()", "credit()", "isCredit()", "hasCredit()", "__get()" exist and have public access in class "AppBundle\Entity\User". -
感谢您抽出宝贵时间 Jeet,我找到了解决方案,并且已经更新了我上面的帖子。
标签: php forms symfony orm frameworks