的Symfony 2 - Layout embed "no entity/class form" validation isn't working答案是100%正確的,但我們使用的背景和孤立他們,所以它總是使用主請求一來就打破規則。您有request_stack
中的所有請求(一個主要和零個或多個子請求)。將Request $request
注入到您的控制器操作中是當前請求,該請求僅爲max=3
的子請求(注入Request
現已棄用)。因此你必須使用'正確的'請求。
執行重定向可以通過很多方式完成,比如返回一些JS腳本代碼來重定向(這是非常醜陋的imho)。我不會使用來自樹枝的子請求,因爲現在開始重定向爲時已晚,但在動作中做出子請求。我沒有測試代碼,但它應該工作。 Controller::forward
是您的朋友,因爲它重複了執行子請求的當前請求。
Controller.php(只看到實現)。
/**
* Forwards the request to another controller.
*
* @param string $controller The controller name (a string like BlogBundle:Post:index)
* @param array $path An array of path parameters
* @param array $query An array of query parameters
*
* @return Response A Response instance
*/
protected function forward($controller, array $path = array(), array $query = array())
{
$path['_controller'] = $controller;
$subRequest = $this->container->get('request_stack')->getCurrentRequest()->duplicate($query, null, $path);
return $this->container->get('http_kernel')->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
}
YourController.php
public function pageAction() {
$formResponse = $this->forward('...:...:form'); // e.g. formAction()
if($formResponse->isRedirection()) {
return $formResponse; // just the redirection, no content
}
$this->render('...:...:your.html.twig', [
'form_response' => $formResponse
]);
}
public function formAction() {
$requestStack = $this->get('request_stack');
/* @var $requestStack RequestStack */
$masterRequest = $requestStack->getCurrentRequest();
\assert(!\is_null($masterRequest));
$form = ...;
$form->handleRequest($masterRequest);
if($form->isValid()) {
return $this->redirect(...); // success
}
return $this->render('...:...:form.html.twig', [
'form' => $form->createView()
]);
}
your.html.twig
{{ form_response.content | raw }}
嘿Aitch,感謝您詳細的解答和代碼示例!我做了像你說的一切,並在我的基礎模板上渲染'pageAction'。 現在我得到這個錯誤: 變量「形式」不存在於ControllerViews/Renders/form.html.twig第1行 – user264593
,您可以從'formAction'看到我們在'render()'中傳遞'form'並且你可以在form.html.twig中使用它。在'pageAction'中的'your.html.twig'中,您傳遞了HTML格式的'form_response',您可以在樹枝中使用它。請仔細檢查'your.html.twig'中是否有'form'變量,並試着瞭解控制器操作中發生了什麼以找出問題。 – Aitch
好吧,我發現這個問題。在pageAction中,我呈現了form.html.twig而不是your.html.twig。現在我正在獲取表單,但它仍然無法工作。我認爲它仍然是一個請求的問題,因爲在提交表單後,URL會發生如下變化 - >?form [search] = Test&form [category] =&form [type] =&form [location] =&form [send] = &form [_token] = nQCbivIi7IppDpaWtmEesLOOVEoPL7njJCPpXPlxxPg – user264593