2014-04-21 29 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'; 
    } 
}