【问题标题】:Passing Args Down Catalyst Chain w/$c->visit使用 $c->visit 将 Args 传递到 Catalyst Chain
【发布时间】:2013-02-19 12:10:53
【问题描述】:

在我的一个 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。但实际上,它似乎根本没有被传递下去。

我误入歧途了?

【问题讨论】:

    标签: perl catalyst


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      结果只是捕获,而不是 args 传递到链中。

      根据文档:

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

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

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

      第一个 args 数组遇到第一个动作并停止,但第二个数组按照我的意愿一直沿链向下移动。

      我希望$c->visit('/assets/widget',[],[$arg]) 可以工作,但它没有。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-03
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多