2

在我的一个 Catalyst 操作中,我试图在不同的控制器中获取另一个操作的主体响应 (HTML)。(为了将一页“嵌入”到另一页中)

我想办法做到这一点是一个$c->visit. (如果我误解了 $c->visit,那么我剩下的问题就不需要回答了。)

有问题的操作需要一个 arg,但直到更进一步的链条,它看起来像这样:

/equipment/*/assets/widget


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

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

如果我尝试:

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

我希望它沿着链条传播并给 /assets/captureID 我的 $arg。但实际上,它似乎根本没有通过链条传递。

我误入歧途到哪里去了?

4

2 回答 2

1

结果只有捕获,而不是参数传递到链中。

根据文档:

$c->visit($action [, \@captures, \@arguments ])

所以我能够通过执行以下操作取得成功:

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

第一个 args 数组命中第一个动作并停止,但第二个数组像我想要的那样一直沿链向下移动。

我希望$c->visit('/assets/widget',[],[$arg])工作,但事实并非如此。

然而,毕竟我意识到我不能那样抓住身体的反应,这是最终目标。无论哪种方式,希望我的鹅追逐对某人有所帮助。

于 2013-02-19T00:56:04.783 回答
1

正如你所发现的,那时身体并不存在。你必须打电话来渲染你的视图,或者安排 /assets/widget$c->res->body($foo)直接设置。委婉地说,我发现捕获子请求的主体的想法非常规。我无法想象你会用它做什么而不违背良好的 MVC 设计原则。

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

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

[%- IF foo;
        PROCESS widget.tt;
    END; -%]
于 2013-02-19T04:10:53.897 回答