【问题标题】:execute global function automatically on running controller in yii2在 yii2 中运行的控制器上自动执行全局函数
【发布时间】:2021-12-30 20:25:33
【问题描述】:

我们有网页,如果会话超时或用户注销,用户将被重定向到$this->goHome()。我们必须销毁所有会话,所以我们必须添加一个销毁会话的函数。这个函数应该在 Yii2 中运行任何动作/控制器之前执行,即类似于 codeigniter 中的钩子。我们尝试了一个破坏会话的辅助函数,我们在 main.php 布局中将该函数称为 HomeHelper::getHelpDocUrlForCurrentPage();,但是布局将在控制器中运行操作后执行,它应该可以运行任何控制器,因为我们有 100 多个控制器.如何实现这一点,请以正确的方式向我们提出建议。提前致谢。

【问题讨论】:

    标签: php session yii2 hook helper


    【解决方案1】:

    config/main.php 
    

    你可以尝试使用'on beforeAction'

    return [
        'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
        'bootstrap' => [
            'log',
            ....     
        ],   
        'on beforeAction' => function($event){
            // your code ..
        } ,
        'modules' => [
           ....
        ],
        ...
    ];
    

    【讨论】:

      【解决方案2】:

      虽然@ScaisEdge 解决方案可行,但我认为应用程序配置不适合存放应用程序逻辑。

      你应该使用filters来达到你想要的结果。

      首先,您需要使用您的逻辑实现过滤器。比如这样:

      namespace app\components\filters;
      
      class MyFilter extends yii\base\ActionFilter
      {
          public function beforeAction() {
              // ... your logic ...
          
              // beforeAction method should return bool value.
              // If returned value is false the action is not run
              return true;
          }
      }
      

      然后您想将此过滤器与任何其他behavior 附加到您要应用此过滤器的任何控制器上。或者,如果您想为每个动作/控制器应用过滤器,您可以将过滤器附加到应用程序。您可以在应用程序配置中执行此操作:

      return [
          'as myFilter1' => \app\components\filters\MyFilter::class,
          // ... other configurations ...
      ];
      

      如果其中一些可以帮助您,您也可以查看现有的 core filters

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 2018-05-04
        • 2019-10-27
        相关资源
        最近更新 更多