【问题标题】:Codeigniter 4 - get instance in helper functionCodeigniter 4 - 在辅助函数中获取实例
【发布时间】:2020-04-10 10:08:20
【问题描述】:

如何让 ci4 实例进入辅助函数? $CI =&get_instance();

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    made对此有所了解。这是一种方法。

    1. 创建一个帮助文件,您可以随意命名。
    2. 将以下代码添加到您刚刚创建的助手中。

    帮助文件的内容:即:utility_helper.php

    <?php
    
    $CI_INSTANCE = [];  # It keeps a ref to global CI instance
    
    function register_ci_instance(\App\Controllers\BaseController &$_ci)
    {
        global $CI_INSTANCE;
        $CI_INSTANCE[0] = &$_ci;
    }
    
    
    function &get_instance(): \App\Controllers\BaseController
    {
        global $CI_INSTANCE;
        return $CI_INSTANCE[0];
    }
    
    1. 基本控制器

      的开头调用register_ci_instance($this)
    2. 现在你可以在任何你想要的地方使用get_instance(),就像CI3一样:$ci = &amp;get_instance()

    我想提三个注意事项

    • 我仅在 PHP8 上进行了测试。
    • 我不确定在调用get_instance 时是否需要&amp;。但是,您可以选择使用任何您想要的形式。所以拨打$ci = get_instance() 也可以,但您可以随意拨打$ci = &amp;get_instance()
    • 确保将 \App\Controllers\BaseController 更改为适当的内容(即:您的基本控制器)。类型提示非常棒,因为 IDE 可以理解它们。

    【讨论】:

      【解决方案2】:

      我明白了(使用 CodeIgniter4):

      控制器中:

      helper('login');      
      $isLog=isLogged($this,"user","passwd");
      
      if($isLog)
        ....
        else
        ....
      

      助手中:

      use App\Models\Loginmodel as Loginmodel;
      
      function isLogged($ci,$e,$c){
          $ci->login = new Loginmodel;
          $ci->login->Like('paassword',$c);
          $id=$ci->login->select('id')->where('username',$e)->findAll();
          return $id;
      }
      

      我希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        创建一个通用助手来保存控制器实例。假设这里是common_helper.php

        $CI4 = new \App\Controllers\BaseController;
        
        function register_CI4(&$_ci)
        {
            global $CI4;
            $CI4 = $_ci;
        }
        

        在你的BaseController

        public $user_id;
        protected $helpers = ['form', 'url', 'common']; // Loading Helper
        
        public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
        {
            parent::initController($request, $response, $logger);
        
            register_CI4($this); // Registering controller instance for helpers;
            $this->user_id = 4;
        }
        

        现在您将在所有其他助手中获取控制器实例。假设一个新的 heper user_helper as

        function show_user_id()
        {
            global $CI4;
            echo $CI4->user_id; // Showing 4
        }
        

        我在PHP Version: 8.0.6测试过

        【讨论】:

          猜你喜欢
          • 2014-01-23
          • 2017-06-06
          • 1970-01-01
          • 2012-01-07
          • 1970-01-01
          • 1970-01-01
          • 2015-12-07
          • 2019-07-20
          相关资源
          最近更新 更多