[英]Codeigniter 4: Helper function which is loaded using BaseController is not available in library unless the helper is loaded in library too
以前我使用的是 Codeigniter 3,我使用autoload.php
加载所有助手和库。 现在迁移到 CI4,我尝试了以下操作,
BaseController.php
中加载我的帮助文件Controller.php
的__construct
中加载助手。 我有一个图书馆说 Demo.php 和 function check_user_logged()
。 当我从 function 调用我的get_cookie()
时,它显示Call to undefined function App\Libraries\get_cookie()
。
这个 function check_user_logged()
从 controller 调用时,
<?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 助手的唯一方法吗? 或者我错过了什么?
我个人更喜欢在需要它的特定函数/类中加载助手。
在库的构造函数中加载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
}
}
在库的方法中加载cookie助手。
助手 function
get_cookie()
从当前Request
object 中获取 cookie,而不是从Response
中获取。 这个 function 检查$_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
}
}
在 当前响应的 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
}
}
使用cookies(...)
全局 function。 无需加载任何助手。
获取
Response
持有的全局CookieStore
实例。
<?php
namespace App\Libraries;
class Demo
{
public function check_user_logged()
{
print_r(cookies()->get('name')); // just for simplicity printing the cookie
}
}
在 BaseController 中加载通用 CI4 cookie助手应该可以。
protected $helpers = ['cookie','my_security_helper' ];
您可以发布您的原始错误代码吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.