如何在 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 中创建它,就像您现在所做的那样。
第一个选项往往更干净一些。
我尝试在视图中使用自己的库,但失败并显示“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 中创建它,就像您现在所做的那样。
第一个选项往往更干净一些。