2015-11-23 4 views
-1

У меня есть умение разработчика и сущности, у меня много навыков с платформой, языком и специальностью, и мне нужно создать форму для разработчика, разработчик может выбрать выбранные навыки, а когда выбранный, разработчик навыков может выбрать Платформы, язык и специальность для это умение. Если разработчик выбрал два навыка или более, у вас больше платформ, языка и специальности для выбранных. И я не знаю, как это создается в Symfony. Теперь я создаю форму только выбранные навыкиSymfony ManyToMany в форме

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

, но теперь у меня есть форма ошибки не действует, интересно, когда я добавляю «расширил» => правда, все отлично работает, но мне не нужно расширить мне нужно просто выбран поле: это моя сущность

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

Как добавить навыки к разработчику с специальными платформами и языками? –

ответ

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)) 
Смежные вопросы