【问题标题】:Does Catalyst make $c globally available?Catalyst 是否使 $c 全球可用?
【发布时间】:2016-07-28 22:06:09
【问题描述】:

有没有办法在不传递$c 的情况下访问它?我有一个通过CGI::Application 运行的第三方库,我用Catalyst::Controller::WrapCGI 引导它。将$c 放入被调用的代码以便我准备将其迁移到 Catalyst 的最佳方法是什么?

如果无法访问,我如何在应用程序上下文中访问$c

【问题讨论】:

    标签: fastcgi catalyst


    【解决方案1】:

    没有

    至少据我所知,this blog entry in the Catalyst Advent Calendar 让您了解如何完成它。他们只是创建一个全局和一个访问器,如果它有效.. 它有效吗?

    our $__ACTIVE_CTX;
    sub ctx { $__ACTIVE_CTX }
    
    around 'dispatch' => sub {
      my ($orig, $c, @args) = @_;
      local $__ACTIVE_CTX = $c;
      $c->$orig(@args)
    };
    

    但是,在你自己动手之前,请查看这个模块CatalystX::GlobalContext,它正好解决了这个问题。抄自概要:

    package MyApp::Controller::Root;
    
    use CatalystX::GlobalContext ();
    
    sub auto : Private {
        my ($self, $c) = @_;
        CatalystX::GlobalContext->set_context($c);
        1;
    }
    
    package Some::Other::Module;
    
    use CatalystX::GlobalContext '$c';
    
    ...
    do stuff with $c
    ...
    

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 1970-01-01
      • 2017-06-02
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多