Catalyst $ c-> req-> params为空?

时间:2012-02-08 13:22:42

标签: perl forms parameters catalyst

尝试使用表单字段催化一些原型页面。我的Catalyst控制器在提交时似乎没有从表单获取输入。

我试图减少模板&控制器尽可能地降低,我仍然遇到这个问题。

模板很简单:

<body>
    <form action="/minimal-testing" method="get">
          <select id="select02">
            <option value="cat1">cat1</option>
            <option value="cat2">cat2</option>
          </select>
          <select id="select06">
            <option value="1">1</option>
            <option value="2">2</option>
          </select>
        <input type="submit" value="submit" title="submit" />
    </form>
    <p> Hello, params says: </p>
    <p>
      [% FOR param IN params ; param.key ; ' = ' ; param.value; END %]
    </p>
</body>

控制器是:

sub minimal_testing :Path('minimal-testing') :Args(0) {
    use Data::Dumper;
    my ( $self, $c ) = @_;
    $c->stash(params=>$c->req->params);
    $c->stash(template => "dynamic/minimal-testing.tt");
    $c->log->debug(Dumper($c->request->params));
}

当我浏览表单,从选择选项中选择并提交时,我的调试日志只是说

[debug] $VAR1 = {};

显然我错过了一些如此明显的东西,我只是没有看到它......请赐教。

1 个答案:

答案 0 :(得分:2)

你是对的。我怀疑你的Catalyst日志应该让你知道这里出了什么问题。问题不在于Catalyst。

基本上,它是格式错误的HTML - 您的表单输入每个都需要一个name参数,可以在POST中传递回服务器。

      <select id="select02" name="select02">
        <option value="cat1">cat1</option>
        <option value="cat2">cat2</option>
      </select>

id适用于CSS,name适用于FORM处理。

试试看,您应该记录如下:

[11:31:28.499 16014:debug] Body Parameters are:

.-------------------+----------------------------------------.
| Parameter         | Value                                  |
+-------------------+----------------------------------------+
| select02          | cat1                                   |
| select06          | 2                                      |
'-------------------+----------------------------------------'

希望有所帮助。