繁体   English   中英

Codeigniter 4:使用 BaseController 加载的助手 function 在库中不可用,除非助手也在库中加载

[英]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,我尝试了以下操作,

  1. 我尝试在BaseController.php中加载我的帮助文件
  2. 我也尝试在我的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 助手的唯一方法吗? 或者我错过了什么?

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

选项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助手。

助手 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
    }
}

选项 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(...)全局 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM