3

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

控制器 "Foo\ModelBundle\Controller\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 路由的路由信息​​:

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

4

3 回答 3

1

我试图为您回答这个问题,您最初在http://forum.symfony-project.org/viewtopic.php?f=23&t=34427&p=115961#p115961上发布了这个问题

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

我希望你会发现它很有帮助。

于 2011-04-11T15:53:57.577 回答
1

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

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

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

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

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

于 2011-04-11T16:37:59.160 回答
1

对于这个功能:public function createAction($title, $author, $content)

路由必须是这样的:

post:
    pattern:        /post/{title}/{$author}/{content}
    defaults:       { _controller: FooModelBundle:Post:create }
    requirements:
            _method:        POST
于 2012-05-18T01:08:44.990 回答