如何在 Codeigniter 4 的视图中使用库

How to use a librarie in views in Codeigniter4

我尝试在视图中使用自己的库,但失败并显示“undefined 属性: CodeIgniter\View\View::$mylib”

这是基地控制器

protected $mylib;

    /**
     * Constructor.
     */
    public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {
    
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);
        
        //--------------------------------------------------------------------
        // Preload any models, libraries, etc, here.
        //--------------------------------------------------------------------
        // E.g.:
        // $this->session = \Config\Services::session();
        
        //Include our librarie with http-request
        $this->mylib = new mylib(service('request'));
    }

在控制器中我以这种方式使用它,在这里我可以毫无问题地使用我的库。测试函数将 return 一个简单的文本。

namespace App\Controllers;

//Important to add our librarie (session, rbac, login etc.)

    use App\Libraries\mylib;
    ...
    die("Test: $this->mylib->testfunction());

如果我在我的视图文件中尝试相同的操作,我会收到错误。

die("Test: $this->mylib->testfunction());

我做错了什么?

更新

与此同时,我找到了一种在视图中使用我的库的方法 在我的视图文件顶部,我添加了这个

use App\Libraries\mylib;
$this->mylib = new mylib(service('request'));

它有效,但有没有办法让整个事情变得更容易,这样我就不必在每个视图文件中都写这些行,但也许只写一次,例如基地控制器?

What i do wrong?

您假设因为您在控制器中创建了该库,所以它可以在视图中自动访问,这是不正确的,无论它是否是控制器的 class 属性 .

任何不在视图中的东西都需要在您“使用”它时传入(即 view() 函数的 second parameter)。因此,您可以在 Controller 中创建 Library 并将整个对象传递到 View 中,或者继续直接在 View 中创建它,就像您现在所做的那样。

第一个选项往往更干净一些。