perl - 将参数传递到催化剂链 w/$c->visit

标签 perl catalyst

在我的一个 Catalyst 操作中,我试图在不同的 Controller 中获取另一个操作的正文响应 (HTML)。 (为了将一个页面“嵌入”另一页面)

我认为做到这一点的方法是$c->访问。 (如果我误解了 $c->visit,那么我的问题的其余部分就不需要回答。)

相关操作需要一个参数,但直到链的更下游才会出现,如下所示:

/equipment/*/assets/widget


/assets/captureID (1)
-> /assets/base (0)
-> /assets/pageData (0)
=> /assets/widget

如您所见,只有链中的最后一个操作正在寻找参数。

如果我尝试:

$c->visit('/assets/widget',[$arg]);

我希望它沿着链向下移动并给/assets/captureID我的$arg。但事实上,它似乎根本没有在链条上传递。

我哪里迷路了?

最佳答案

正如你所发现的,此时 body 并不存在。您必须调用来渲染 View ,或者安排/assets/widget 直接设置 $c->res->body($foo) 。温和地说,我发现捕获子请求正文的想法非常规。我无法想象您将用它做什么而不违反良好的 MVC 设计原则。

在我看来,/assets/widget 中的逻辑需要位于模型而不是 Controller 中,以便任何需要它的功能都可以使用它。

和/或您需要将模板分解为(可重用)组件,以便您计划嵌入的任何内容都可以作为单个渲染过程的一部分完成。

[%- IF foo;
        PROCESS widget.tt;
    END; -%]

关于perl - 将参数传递到催化剂链 w/$c->visit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927650/

相关文章:

arrays - Perl 中的引用 : Array of Hashes

perl eval block 抛出 execptions 没有错误

perl - 如何在 Catalyst 中限制对 POST 的请求

perl - 在 Perl Catalyst 应用程序的配置变量上加载模块

c - 如何访问 C 程序中的 perl 控制台输出?

Perl 内联子例程和用于排序的条件运算符

perl - 我应该如何使用 Catalyst 在 Perl 中进行 RPC?

Perl DBI 连接有效但不适用于 Catalyst

perl 命令行替换字符串

perl - 使用 `bless` 创建具有继承的对象