如何在 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').