所以我一直在玩Symfony表单,我想改变表单操作。
我已经按照guide进行了操作,但我不明白“target_route”是什么意思。因此,我收到一条错误消息(见下文)
我有下面的代码,我很确定我在setAction中使用的路由是有效的,因为我可以使用浏览器浏览它。
有什么想法吗?谢谢
我的代码:
<?php
// src/AppBundle/Controller/DirectoryController.php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class DirectoryController extends Controller {
/**
* @Route("/directory/form")
*/
public function formAction() {
$form = $this->get("form.factory")
->createNamedBuilder("form", "form")
->setAction($this->generateUrl("/directory/search"))
->setMethod("get")
->add("search", "submit", array("label" => "Search"))
->add("reset", "reset", array("label" => "Reset"))
->getForm();
return $this->render(
"directory/form.html.twig",
array("form" => $form->createView()
,
)
);
}
/**
* @Route("/directory/search")
*/
public function searchAction() {
return $this->render(
"directory/view.html.twig"
);
}
}
错误消息:
Unable to generate a URL for the named route "/directory/search" as such route does not exist.
答案 0 :(得分:3)
在示例中,target_route
是路由的名称,而不是其URL。例如,您可以定义如下操作:
/**
* @Route("/directory/search", name="directory_search")
*/
public function searchAction() {
在这种情况下,您的路线名称为directory_search
。然后,您将使用$this->generateUrl('directory_search')
让路由器将名称转换为URL。
你这样做的原因(而不是直接使用网址)是因为这允许你更改网址而不必更改代码中引用它的每个位置。
->setAction($this->generateUrl("/directory/search"))
setAction()
需要一个网址。因此,当您可以给它'/directory/search'
时,最佳做法是$this->generateUrl('directory_search')
。