缺少 Symfony 强制参数
Symfony mandatory parameters missing
我正在使用 Symfony 表单组件向用户显示编辑表单(用于编辑问题)。
当点击编辑按钮时,我在我的控制器中使用这个函数来呈现编辑表单:
/**
* 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 模板中这样设置):
<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>
并且我在我的控制器中使用另一个函数来处理请求(是的,这不是最佳实践,我只是在玩)。
/**
* @Route("/questions/{slug}", name="app_question_update", methods={"PUT"})
* @param Request $request
* @param Question $question
* @param EntityManagerInterface $entityManager
* @return RedirectResponse
*/
public function update(Question $question, Request $request, EntityManagerInterface $entityManager): RedirectResponse
{
dd($question);
// ...
}
为了更新正确的问题,我需要问题。
所以我虽然传递了 Question $question
,但 Symfony 会使用在 slug 中找到的 id 来执行“findOneBy”(而不是直接传递 id 等)。
但我收到以下错误:
在呈现模板期间抛出异常(“缺少某些必需参数(“id”)以生成路由“app_question_update”的 URL。”)。
当我删除 slug 和 Question $question 参数时,表单被呈现,当我在提交后添加请求时,我也可以看到表单数据,但我缺少问题 ID + 我想得到这与 slug 一起工作。
您必须将 {slug}
参数传递给您的 twig 模板中的 path() 函数:
{{ path('app_question_update', {slug: quetionId}) }}
但在此之前,您必须将 questionId
传递给编辑控制器中的视图:
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'}) }}
我正在使用 Symfony 表单组件向用户显示编辑表单(用于编辑问题)。
当点击编辑按钮时,我在我的控制器中使用这个函数来呈现编辑表单:
/**
* 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 模板中这样设置):
<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>
并且我在我的控制器中使用另一个函数来处理请求(是的,这不是最佳实践,我只是在玩)。
/**
* @Route("/questions/{slug}", name="app_question_update", methods={"PUT"})
* @param Request $request
* @param Question $question
* @param EntityManagerInterface $entityManager
* @return RedirectResponse
*/
public function update(Question $question, Request $request, EntityManagerInterface $entityManager): RedirectResponse
{
dd($question);
// ...
}
为了更新正确的问题,我需要问题。
所以我虽然传递了 Question $question
,但 Symfony 会使用在 slug 中找到的 id 来执行“findOneBy”(而不是直接传递 id 等)。
但我收到以下错误:
在呈现模板期间抛出异常(“缺少某些必需参数(“id”)以生成路由“app_question_update”的 URL。”)。
当我删除 slug 和 Question $question 参数时,表单被呈现,当我在提交后添加请求时,我也可以看到表单数据,但我缺少问题 ID + 我想得到这与 slug 一起工作。
您必须将 {slug}
参数传递给您的 twig 模板中的 path() 函数:
{{ path('app_question_update', {slug: quetionId}) }}
但在此之前,您必须将 questionId
传递给编辑控制器中的视图:
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'}) }}