如何在Symfony2中设置表单操作? (2.8 LTS)

时间:2016-01-14 04:58:12

标签: symfony symfony-forms

所以我一直在玩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. 

1 个答案:

答案 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')