提交表单后收到以下错误消息:
控制器 “富\ 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
答案 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