2014-04-21 4 views
0

J'utilise Symfony2 pour un projet PHP, mais j'ai une question sur l'héritage d'entité.Configuration de l'entité parente à partir du formulaire d'entité enfant

J'ai un modèle de base de données qui nécessite de faire la différence entre les différents types d'employés.

Voici un extrait du modelisation:

employé

  • civilité
  • Nom
  • prenom
  • hired_at

Secrétaire étend l'employé

  • employé [entité employé]
  • rôles [une autre entité]

Vendeur étend employé

    employé
  • [entité employé]
  • section
  • [une autre entité]

I dois le séparer parce que j'ai une autre entité, appelée Message, que chaque employés peuvent envoyer à d'autres.

message

  • auteur [entité Employee]
  • destinataire [entité employé]
  • titre
  • contenu
  • sent_at

Dans ma demande, je voudrais être capable de créer un nouveau "Secrétaire" par exemple, et le mettre en place s Les propriétés "Employee" dans le même formulaire, plutôt que de créer l'entité Employee, puis le lier à la nouvelle secrétaire ...

Quelle est la bonne façon de le faire avec Symfony2?

Je sais que je pourrais ajouter les propriétés à la forme et définir les entités manuellement, mais je pense vraiment qu'il devrait y avoir un propre façon de le faire ...

Est-il possible d'utiliser le FormBuilder?

Répondre

0

Assez facile en fait, je ne savais pas qu'il était possible d'ajouter un autre type de formulaire comme type de champ dans Symfony2.

La manière de travail, juste au cas où:

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'; 
    } 
} 
Questions connexes