codeigniter 代码点火器4:使用BaseController加载的Helper函数在库中不可用,除非也在库中加载了Helper

vktxenjb  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(166)

以前我使用Codeigniter 3,并使用autoload.php加载所有助手和库。现在迁移到CI4,我尝试了以下操作:
1.我尝试在BaseController.php中加载我的帮助文件
1.我也尝试在我的Controller.php上加载__construct中的助手。
我有一个库,比如Demo.php和函数check_user_logged()。当我从函数调用我的get_cookie()时,它说Call to undefined function App\Libraries\get_cookie()
此函数check_user_logged()在从控制器调用时为:

<?php
use App\Libraries\Demo;

protected $demo;

public function __construct()
{
    helper('cookie');
    $this->demo = new Demo();
}

public function index()
{
    $this->demo->check_user_logged();
}

演示. php

<?php
namespace App\Libraries;
Class Demo
{
   public function check_user_logged()
   {
      print_r(get_cookie('name')); // just for simplicity printing the cookie
   }
}

这是在Demo库构造函数中加载cookie助手的唯一方法吗?还是我遗漏了什么?

z4iuyo4d

z4iuyo4d1#

我个人更喜欢在需要帮助的特定函数/类***中加载帮助器***。

选项1:

在库的构造函数中加载 cookie 帮助器。

<?php

namespace App\Libraries;
class Demo
{
    public function __construct()
    {
        helper('cookie');
    }

    public function check_user_logged()
    {
        print_r(get_cookie('name')); // just for simplicity printing the cookie
    }
}
选项2:

在程式库的方法中载入 cookie Helper。
helper函数get_cookie()从当前Request对象中获取cookie,而不是从Response对象中获取cookie。此函数检查$_COOKIE数组是否设置了cookie,并立即获取cookie。

<?php

namespace App\Libraries;
class Demo
{
    public function check_user_logged()
    {
        helper('cookie');

        print_r(get_cookie('name')); // just for simplicity printing the cookie
    }
}
选项3A:

正在获取当前响应的Cookie集合中的Cookie。

<?php

namespace App\Libraries;
class Demo
{
    public function check_user_logged()
    {
        print_r(\Config\Services::response()->getCookie('name')); // just for simplicity printing the cookie
    }
}
选项3B:

使用cookies(...)全局函数。无需加载任何助手。
提取Response所持有的全域CookieStore执行严修。

<?php

namespace App\Libraries;
class Demo
{
    public function check_user_logged()
    {
        print_r(cookies()->get('name')); // just for simplicity printing the cookie
    }
}
ykejflvf

ykejflvf2#

在BaseController中加载通用CI4cookie帮助器应该可以工作。

protected $helpers = ['cookie','my_security_helper' ];

你能把你原来的错误代码贴出来吗?

相关问题