【问题标题】:Setup parent entity from child entity form从子实体表单设置父实体
【发布时间】:2014-04-21 15:52:38
【问题描述】:
我正在将 Symfony2 用于 PHP 项目,但我有一个关于实体继承的问题。
我有一个数据库模型,需要区分不同类型的员工。
这是模型化的摘录:
员工
秘书延长雇员
卖家扩展员工
我必须将其分开,因为我有另一个实体,称为 Message,每个员工都可以发送给其他人。
留言
- 作者 [员工实体]
- 收件人 [员工实体]
- 标题
- 内容
- sent_at
例如,在我的应用程序中,我希望能够创建一个新的“秘书”,并以相同的形式设置其“员工”属性,而不是创建员工实体然后将其链接到新的秘书...
使用 Symfony2 的正确方法是什么?
我知道我可以将属性添加到表单并手动设置实体,但我真的认为应该有一种更简洁的方法来做到这一点......
可以使用 FormBuilder 吗?
【问题讨论】:
标签:
php
sql
forms
doctrine-orm
symfony-2.4
【解决方案1】:
其实很简单,我不知道可以在 Symfony2 中添加另一个 FormType 作为字段类型。
工作方式,以防万一:
namespace MyAdminBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class SecretaryType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('employee', new EmployeeType(), array('label' => 'Employee', 'required' => true))
->add('password', 'password', array('label' => 'Password', 'required' => true))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyCoreBundle\Entity\Secretary'
));
}
/**
* @return string
*/
public function getName()
{
return 'my_adminbundle_secretary';
}
}