后参数作为动作输入

时间:2011-04-10 17:09:48

标签: php routing symfony

提交表单后收到以下错误消息:

  

控制器   “富\ ModelBundle \控制器\ PostController中:: createAction()”   要求您提供值   “$ title”论证(因为那里   没有默认值或因为那里   在此之后是一个非可选参数   一个)。

表单不是由symfony框架表单功能创建的,它只是在twig模板中的简单html:

<form action="{{ path('post') }}" method="post">
        Title: <input name="title"><br>
        Author: <input name="author"><br>
        Content: <input name="content"><br>
        <input type="submit">
</form>

这是邮政路线的路线信息:

post:
        pattern:        /post
        defaults:       { _controller: FooModelBundle:Post:create }
        requirements:
                _method:        POST

这是创建动作的定义:

public function createAction($title, $author, $content) {

请求的symfony探查器向我显示,$ title,$ author和$ content被设置为正确的值。

为操作提供所需参数的正确方法是什么?

它们不应该由框架填充POST请求中的值吗?

我正在使用symfony 2.0 PR 10。

此处也交叉使用:http://forum.symfony-project.org/viewtopic.php?f=23&t=34427

3 个答案:

答案 0 :(得分:1)

我试图在http://forum.symfony-project.org/viewtopic.php?f=23&t=34427&p=115961#p115961

发布问题的地方为您解答此问题

这些想法是使用框架的表单生成功能,并通过请求对象检索数据。

我希望你会发现它非常有用。

答案 1 :(得分:1)

不使用框架表单生成和验证功能的原因如下:

我想要实现的是使用一些动态数据快速测试动作。 此时我不想为数据绑定和表单创建编写x行代码。它是下一步。

我弄错的是路由中参数的概念。

我的想法是,如果我使用/ {foo} / {bar}作为匹配器,它是一个简单的GET请求。 参数将填充到控制器,无需任何进一步配置。 如果我现在使用POST请求,则参数也应填充到操作中。

关键是,{foo}和{bar}是URI的一部分而不是任何GET参数,例如?val = xy。 GET / POST参数与操作的输入参数无关。 它们是通过请求对象访问的,当然不会作为方法参数传递给操作。

答案 2 :(得分:1)

此功能:public function createAction($title, $author, $content)

路由必须是这样的:

post:
    pattern:        /post/{title}/{$author}/{content}
    defaults:       { _controller: FooModelBundle:Post:create }
    requirements:
            _method:        POST