繁体   English   中英

如何使用实体字段选择要编辑的实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM