在我的一个 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/