2014-04-21 28 views
0

我正在为一个PHP项目使用Symfony2,但我有一个关于实体继承的问题。从子实体形式设置父实体

我有一个数据库模型,需要区分不同类型的员工。

这里是modelisation的提取物:

雇员

  • 礼貌
  • 名称
  • 姓名
  • hired_at

司延伸雇员

  • 雇员[Employee实体]
  • 角色[另一实体]

卖方延伸雇员

  • 雇员[Employee实体]
  • 部[另一实体]

I 必须将其分开,因为我有另一个名为Message的实体,每个员工都可以发送给其他实体。

消息

  • 作者[Employee实体]
  • 收件人[Employee实体]
  • 标题
  • 内容
  • sent_at

在我的应用程序,我想能够创建一个新的“秘书”,并设置它s“员工”属性,而不是创建员工实体,然后将其链接到新的秘书一...

什么是正确的方式来做到这一点与Symfony2?

我知道我可以在属性添加到窗体和手动设置的实体,但我真的觉得应该有做一个更清洁的方式...

是否有可能使用FormBuilder?

回答

0

其实很简单,我不知道可以在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'; 
    } 
}