Codeigniter 4 -在helper函数中获取示例

btxsgosb  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(137)

如何将ci 4示例导入到helper函数中?〈-这是在版本3,这是如何去在版本Codeigniter 4?

c0vxltue

c0vxltue1#

我有个要点,这里有个方法。
1.创建一个帮助文件,你可以随意命名它。
1.将以下代码添加到刚刚创建的帮助器中。

帮助文件的内容:例如: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)
1.现在您可以在任何需要的地方使用get_instance(),就像CI3一样:$ci = &get_instance()
我想提三个注意事项

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

ncgqoxb02#

我明白了(使用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;
}

我希望这能帮上忙。

vs91vp4v

vs91vp4v3#

创建一个公共助手来保存控制器示例。

$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;
}

现在,您将获得所有其他助手中的控制器示例。

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

我在PHP Version: 8.0.6中测试了它

8yoxcaq7

8yoxcaq74#

对我来说,这是对我最好的解决方案:

if (!function_exists('getSegment'))
{

    /**
     * Returns segment value for given segment number or false.
     *
     * @param int $number The segment number for which we want to return the value of
     *
     * @return string|false
     */
    function getSegment(int $number)
    {
        $request = \Config\Services::request();

        if ($request->uri->getTotalSegments() >= $number && $request->uri->getSegment($number))
        {
            return $request->uri->getSegment($number);
        }
        else
        {
            return false;
        }
    }

}

来源:https://forum.codeigniter.com/thread-74755.html

相关问题