[英]How to use entity field to select entity to edit
控制器调用带有EntityType的表单以选择要编辑的实体。 表单的模板不会以实体ID返回给控制器。 以为我知道该怎么做,但是我尝试了多种变体而没有成功。 当前状态:
控制器:
/**
* @Route("/edit/{id}", name="artist_edit")
*/
public function editArtistAction(Request $request, Defaults $defaults, $id = null)
{
if (null !== $id) {
$em = $this->getDoctrine()->getManager();
$artist = $em->getRepository('AppBundle:Artist')->find($id);
} else {
$form = $this->createForm(SelectArtistType::class, null, ['target' => 'edit']);
return $this->render('Artist/selectArtist.html.twig',
[
'form' => $form->createView(),
]);
}
...
}
形成:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$target = $options['target'];
$builder
->add('artist', EntityType::class,
[
'class' => 'AppBundle:Artist',
'label' => 'Select artist for ' . $target,
'choice_label' => function($artist, $key, $index) {
return $artist->getLastName() . ', ' . $artist->getFirstName();
},
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('a')
->orderBy('a.firstName', 'ASC')
->orderBy('a.lastName', 'ASC');
},
])
->add('save', SubmitType::class,
array(
'label' => 'Select',
'label_format' => ['class' => 'text-bold']
));
}
模板:
{% extends "base.html.twig" %}
{% block body %}
<div class="row">
<div class="col-sm-4"></div>
<div class="col-sm-4">
{{ form_start(form) }}
{{ form_row(form.artist) }}
{{ form_rest(form) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
</div>
</div>
{% endblock body %}
您不会在任何地方读取来自POST的数据。 在您的控制器中,您应该在收到帖子时检查请求。 在控制器的开头放置这样的内容,这样您就可以在POST中查看收到的内容:
if ($request->isMethod('POST')) {
var_dump($request->request)
}
然后根据需要获取所需的参数进行处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.