首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter 4:使用BaseController加载的助手函数在库中不可用,除非助手也加载在库中

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

Stack Overflow用户
提问于 2022-09-23 20:37:21
回答 2查看 102关注 0票数 0

以前我使用Codeigniter 3,我加载所有的助手,库使用autoload.php。现在迁移到CI4,在那里我尝试了以下内容:

  1. 我尝试在BaseController.php中加载我的助手文件
  2. 我也尝试在我的__construct上加载Controller.php中的助手。

我有一个图书馆说Demo.php和函数check_user_logged()。当我从函数中调用我的get_cookie()时,它是Call to undefined function App\Libraries\get_cookie()。

此函数在从控制器调用时为check_user_logged(),

代码语言:javascript
复制
<?php
use App\Libraries\Demo;

protected $demo;

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

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

The Demo.php

代码语言:javascript
复制
<?php
namespace App\Libraries;
Class Demo
{
   public function check_user_logged()
   {
      print_r(get_cookie('name')); // just for simplicity printing the cookie
   }
}

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

EN

回答 2

Stack Overflow用户

发布于 2022-09-24 10:48:55

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

备选案文1:

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

代码语言:javascript
复制
<?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助手。

get_cookie()从当前的Request对象而不是从Response获取cookie。此函数检查是否设置了$_COOKIE数组并立即获取它。

代码语言:javascript
复制
<?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集合里。

代码语言:javascript
复制
<?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(...)全局函数。不需要装任何帮手。

获取由CookieStore持有的全局Response实例。

代码语言:javascript
复制
<?php

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

Stack Overflow用户

发布于 2022-09-29 09:15:17

在CI4中加载通用cookie助手应该可以工作。

代码语言:javascript
复制
protected $helpers = ['cookie','my_security_helper' ];

你能把你的原始错误代码寄出去吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73832756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档