【问题标题】:Catalyst $c->req->params empty?催化剂 $c->req->params 为空?
【发布时间】:2012-02-29 22:28:42
【问题描述】:

尝试催化一些带有表单域的原型页面。我的 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 = {};

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

【问题讨论】:

    标签: perl forms parameters catalyst


    【解决方案1】:

    你说得对。我怀疑你的 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                                      |
    '-------------------+----------------------------------------'
    

    希望对您有所帮助。

    【讨论】:

    • 太棒了。太感谢了。我知道它必须是非常明显的东西!很久没有搞乱表单的内部结构了……“id 用于 CSS,name 用于 FORM 处理”——我会记住这句口头禅 ;-)
    • 不客气,很高兴能为您提供帮助。说“id 用于 DOM 操作,name 用于 FORM 处理”可能更准确。顺便说一句,您可能想考虑勾选答案 - 这就是 SO 系统。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2020-01-05
    • 2020-12-14
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多