2015-11-23 67 views
-1

我有實體開發和實體技能,技能有多對多與平臺,語言和專業,我需要創建一個開發形式,開發人員可以選擇的技能和選擇當一些技能開發人員可以選擇的平臺,語言和專業的這個技能。如果開發人員選擇了兩種或更多技能,則可以選擇更多平臺,語言和專業。我不知道這是如何在Symfony中創建的。現在,我創建表單唯一入選的技能Symfony的多對多的形式

class DeveloperProfessionalSkillsType extends AbstractType 
{ 
/** 
* @param FormBuilderInterface $builder 
* @param array    $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
      ->add('name'); 
        $builder->add('skills','entity', 
          array(
           'class'=>'Artel\ProfileBundle\Entity\Skill', 
           'property'=>'skill', 
           'multiple'=>true, 
          ) 
         ); 
} 

/** 
* @param OptionsResolverInterface $resolver 
*/ 
public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Artel\ProfileBundle\Entity\Developer', 
     'validation_groups' => array('professional_skills') 
    )); 
} 

/** 
* @return string 
*/ 
public function getName() 
{ 
    return 'developer_professional_skills'; 
} 

但現在我有錯誤的形式是無效的,有趣的,當我加入「擴大」 => true,所有的工作很好,但我不需要擴大我需要簡單的選擇現場: 這是我的實體

class Skill 
{ 

/** 
* @ORM\ManyToMany(targetEntity="Artel\ProfileBundle\Entity\Skill", mappedBy="skills", cascade={"persist"}) 
*/ 
protected $developers; 

/** 
* @var \Artel\ProfileBundle\Entity\CodeDirectoryProgramLanguages 
* 
* @ORM\ManyToMany(targetEntity="CodeDirectoryProgramLanguages", inversedBy="skills", cascade={"persist"}) 
*/ 
protected $language; 

/** 
* @var \Artel\ProfileBundle\Entity\CodeDirectoryPlatforms 
* 
* @ORM\ManyToMany(targetEntity="CodeDirectoryPlatforms", inversedBy="skills", cascade={"persist"}) 
*/ 
protected $platforms; 

/** 
* @var \Artel\ProfileBundle\Entity\CodeDirectorySpecialities 
* 
* @ORM\ManyToMany(targetEntity="CodeDirectorySpecialities", inversedBy="skills", cascade={"persist"}) 
*/ 
protected $specialities; 

和我的行動

public function submitProfessionalSkillsAction($securitytoken) 
    { 
    $em = $this->getDoctrine()->getManager(); 
    $form = $this->createForm(new DeveloperProfessionalSkillsType(), $user->getDeveloper()); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em->flush(); 

推薦,請,如何更好地解決這個問題

+0

我很抱歉,但我不明白你的問題...... – Lino

+0

如何技能,增加開發商與專業平臺和languagies? –

回答

0

而不是

$builder->add('skills','entity', 
          array( 
           'class'=>'Artel\ProfileBundle\Entity\Skill', 
           'property'=>'skill', 
           'multiple'=>true, 
          ) 
         ); 

您可以創建新的形式,並將其添加到您當前的形式是這樣的:

 $builder->add('skills', new SkillsType() 
      ); 

而且在新的形式,你可以定義所有的領域,如:

$builder->add('language','entity', 
         array(
          'class'=>'Artel\ProfileBundle\Entity\Language', 
          'property'=>'some_property', 
          'multiple'=>true, 
         ) 
        ); 

如果您需要很多技能,您可以使用收集表單類型:

->add('skills', 'collection', array('type' => new SkillsType(), 
    'allow_add' => true,'by_reference' => false))