Php Symfony收藏列表
我有: 在标记类型为的表单生成器中Php Symfony收藏列表,php,symfony,Php,Symfony,我有: 在标记类型为的表单生成器中 ->add('skills', CollectionType::class, array( 'entry_type' => TagType::class, 'allow_add' => true, 'allow_delete' => true, )) 我试图做的是只在表单中发布标记ID,但使用这些标记的获取名称呈现表单。我试图: public function buil
->add('skills', CollectionType::class, array(
'entry_type' => TagType::class,
'allow_add' => true,
'allow_delete' => true,
))
我试图做的是只在表单中发布标记ID,但使用这些标记的获取名称呈现表单。我试图:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('id', IntegerType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Tag',
));
}
但一旦我们到达
$form->handleRequest($request)代码>整个表单没有标记的名称。Symfony已经为您提供了这些情况的解决方案。这叫做数据转换器
这里有一个与您尝试做的类似的示例
我建议您从一开始就阅读整篇文章。@nakashu我不建议您仅仅抓住一个代码示例并使用它。我给出的链接有很多解释,如果你想了解你在做什么,你必须阅读:)@Moein你不一定需要一个代码示例,但如果你能解释一下答案(在链接中给出),那就太好了。因此,即使链接断开(无论出于何种原因),您在这里的答案仍然有效,对访问者有用
if($request->getMethod() == 'POST')
{
$form_arr = $request->request->get('form');
$skills = (array_key_exists('skills', $form_arr)) ? $form_arr['skills'] : array();
foreach($skills as $key => $role) { $skills[$key] = $role['id']; }
if(count($skills) > 0)
{
$em->clear();
$roles = $em->getRepository('AppBundle:Tag')->findById($skills);
$project->setSkills($roles);
}
}