将参数从表单提交传递到Symfony2中的特定路由

时间:2011-10-03 08:23:36

标签: symfony

我的routing.yml中有一条路线如下:

pattern:  /admin/clients/{clientid}/projects/{projectid}/review/{id}/comments
defaults: { _controller: ShoutAdminBundle:Project:revcomm }
requirements:
    _method:  POST

现在,在页面(评论页面)上,我有一个表单,用户将在其中输入评论,然后将其提交到该页面。然后用户点击提交,他们将被带回同一页面,但他们的评论将被提交到数据库然后显示。

我的表单代码如下所示:

        <form action="{{ path('ShoutAdminBundle_adminprojectreviewcommentssuccess') }}" method="post" {{ form_enctype(form) }} class="blogger">
            {{ form_errors(form) }}

            <p class="comments">
                {{ form_label(form.from, 'Your Name*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.from) }}
                {{ form_widget(form.from, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="comments">
                {{ form_label(form.comment, 'Your Comment*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.comment) }}
                {{ form_widget(form.comment, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="comments_save">
                <input type="submit" value="Post Your Comment" id="savebutton" class="savebutton" />
            </p>
            {{ form_rest(form) }} 
        </form>

现在。呈现页面时,我收到以下错误:

  

在渲染模板期间抛出异常(“The   “ShoutAdminBundle_route”路由有一些缺少必需参数   (“id”,“projectid”)。“in in   第54行的“ShoutAdminBundle:默认:projectreviewcomments.html.twig”。

如何将变量{clientid}{projectid}{id}传递给页面?这些变量已在页面中声明,这是一个如何在表单提交中包含它们的问题?

干杯

1 个答案:

答案 0 :(得分:4)

您可以使用关联数组通过控制器传递它们:

class ProjectController extends Controller
{
    public function revcommAction($clientid, $projectid, $id)
    {
        // ...

        $params = array(
            'clientid'  => $clientid,
            'projectid' => $projectid,
            'id'        => $id
        );
        return $this->render('ShoutAdminBundle:Default:projectreviewcomments.html.twig', $params);
    }
}

要在模板中向此控制器呈现链接(或表单操作的路径),您可以使用path()表示相对,url()表示绝对链接。第二个参数接受构造链接所需的任何参数,例如:

<a href="{{ path('my_route_name', {'clientid': clientid, ...}) }}"></a>