如何在 Symfony2 中设置表单动作? (2.8 长期支持)
How to set form action in Symfony2? (2.8 LTS)
所以我一直在玩弄 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.
在示例中,target_route
是路由的名称,而不是它的 url。例如,您可以这样定义操作:
/**
* @Route("/directory/search", name="directory_search")
*/
public function searchAction() {
在这种情况下,您的路线名称为 directory_search
。然后,您将使用 $this->generateUrl('directory_search')
让路由器将名称转换为 url.
您这样做的原因(与直接使用 urls 相对)是这样可以让您更改 url 而不必更改 every 放在引用它的代码中。
->setAction($this->generateUrl("/directory/search"))
setAction()
期望 url。所以当你 可以 给它 '/directory/search'
时,最好的做法是 $this->generateUrl('directory_search')
.
所以我一直在玩弄 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.
在示例中,target_route
是路由的名称,而不是它的 url。例如,您可以这样定义操作:
/**
* @Route("/directory/search", name="directory_search")
*/
public function searchAction() {
在这种情况下,您的路线名称为 directory_search
。然后,您将使用 $this->generateUrl('directory_search')
让路由器将名称转换为 url.
您这样做的原因(与直接使用 urls 相对)是这样可以让您更改 url 而不必更改 every 放在引用它的代码中。
->setAction($this->generateUrl("/directory/search"))
setAction()
期望 url。所以当你 可以 给它 '/directory/search'
时,最好的做法是 $this->generateUrl('directory_search')
.