我有一个实体(类别),用户可以为新的/编辑操作选择父级(总是类别),其中链接是vocabolaryId字段。
这是我的CategoryType。
class CategoryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$vocId = $options['data']->getVocabularyId();
$builder
->add('name')
->add('vocabularyId',HiddenType::class,[
'data' => $vocId,
])
->add('description')
->add('weight',null,[
'label' => 'Posizione'
])
;
$builder->add('parent',EntityType::class,array(
'class' => 'AppBundle:Category',
'query_builder' => function (EntityRepository $er) use ($vocId) {
return $er->createQueryBuilder('c')
->where('c.vocabularyId = ?1')
->orderBy('c.name')
->setParameter(1,$vocId);
}
));
}
要获取具有相同词汇表的所有类别的列表,我使用" query_builder"参数。
当我将表单提交给symfony而没有选择父母(或空表)时,它会回复我:"该值无效。" (对于父字段)。
如何设置" null"父母?我的意思是没有父母的类别。
编辑:我添加了"' required' =>假,#&34;就像Stephan Vierkant所说的那样,但是现在我又出现了另一个错误:"警告:spl_object_hash()期望参数1为对象,给出字符串"
这是我的控制器的newAction功能:
/**
* Creates a new Category entity.
*
* @Route("/new", name="admin_category_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request, $vocId)
{
$category = new Category($vocId);
$form = $this->createForm('AppBundle\Form\CategoryType', $category);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
dump($category);
exit();
$em->persist($category);
$em->flush();
return $this->redirectToRoute('admin_category_show', array('vocId' => $vocId, 'id' => $category->getId()));
}
return $this->render('category/new.html.twig', array(
'category' => $category,
'form' => $form->createView(),
'vocId' => $vocId
));
}
答案 0 :(得分:6)
将required
(docs)设为false
:
$builder->add('parent',EntityType::class,array(
'class' => 'AppBundle:Category',
'required' => false,
'query_builder' => function (EntityRepository $er) use ($vocId) {
return $er->createQueryBuilder('c')
->where('c.vocabularyId = ?1')
->orderBy('c.name')
->setParameter(1,$vocId);
}
));
如果您不想要空选项,可以设置placeholder
(docs)。