Php 缺少Symfony强制参数
我使用Symfony表单组件向用户显示编辑表单(用于编辑问题) 单击编辑按钮时,我在控制器中使用此功能来呈现编辑表单:Php 缺少Symfony强制参数,php,symfony,url,routes,Php,Symfony,Url,Routes,我使用Symfony表单组件向用户显示编辑表单(用于编辑问题) 单击编辑按钮时,我在控制器中使用此功能来呈现编辑表单: /** * Display edit form * @Route("/edit/question/{id}", name="app_question_edit", methods={"GET"}) * @param Question $question * @return Response */ public
/**
* Display edit form
* @Route("/edit/question/{id}", name="app_question_edit", methods={"GET"})
* @param Question $question
* @return Response
*/
public function edit(Question $question): Response
{
$form = $this->createForm(QuestionFormType::class, $question);
return $this->render('question/edit.html.twig',[
'questionEditForm' => $form->createView()
]);
}
因此,示例性url应该是“/edit/question/1”
表单操作是对另一个路由的PUT请求(在twig模板中设置如下):
为了更新正确的问题,我需要这个问题。
因此,我认为通过传递Question$Question
,Symfony将使用slug中找到的id执行“findOneBy”(而不是直接传递id等)
但我得到了以下错误:
在呈现模板期间引发了异常(“缺少某些必需参数(“id”)以生成路由“app\u question\u update”的URL)
当我删除slug和Question$Question参数时,表单被呈现,当我在提交后添加请求时,我也可以看到表单数据,但我缺少问题id+我想让它与slug一起工作。你必须将
{slug}
参数传递给你的小树枝模板中的path()函数:
<div class="container mt-2" id="one-question">
{{ form_start(questionEditForm, {'action': path('app_question_update'), 'method': 'PUT'}) }}
{{ form_widget(questionEditForm) }}
<button type="submit" class="btn btn-secondary edit-question-btn mt-2">
Update
</button>
{{ form_end(questionEditForm) }}
</div>
{{ path('app_question_update', {slug: quetionId}) }}
但在此之前,您必须将问题ID
传递到编辑控制器中的视图:
return $this->render('question/edit.html.twig',[
'questionEditForm' => $form->createView(),
'questionId' => $question->getId()
]);
您应该在细枝的路径方法中添加一个
slug
参数
{{ form_start(questionEditForm, {'action': path('app_question_update', {slug: questionEditForm.vars.value.slug}), 'method': 'PUT'}) }}
您需要自己将
slug
参数传递给表单操作中的path()
函数。您可以从questionEditForm.vars
获取它,这样您就不必向视图传递其他对象。啊,我想我已经掌握了窍门!非常感谢。
{{ form_start(questionEditForm, {'action': path('app_question_update', {slug: questionEditForm.vars.value.slug}), 'method': 'PUT'}) }}