问题描述
我知道我们可以通过钩子缩小CI3中的HTML,但可以缩小CI 4中的HTML
我已经通过在每个方法返回之前添加一个minify函数来做到这一点。
minifyHTML(view('admin/template/template',$this->data));
我可以不用在任何地方使用minify函数的其他方式吗?
我还想出了另一种解决方案,即在BaseConroller中添加一个模板函数来呈现所有视图。但是我已经在项目的许多地方使用过view(),这对我来说不可行,但对其他人也可以使用。
解决方法
您需要扩展核心系统类才能在系统范围内做到这一点。
每次CodeIgniter运行时,都会有几个基类作为核心框架的一部分自动初始化。但是,可以将任何核心系统类与您自己的版本交换,甚至可以扩展核心版本。
您可以扩展的两个类是这两个:
- CodeIgniter \ View \ View
- CodeIgniter \ View \ Escaper
例如,如果您要使用新的App \ Libraries \ View类代替核心系统类,则可以这样创建类:
类声明必须扩展父类。
<?php namespace App\Libraries;
use CodeIgniter\View\View as View;
class View implements View
{
public function __construct()
{
parent::__construct();
}
}
将使用类中任何与父类中的方法命名相同的函数来代替本机函数(这被称为“方法重写”)。这使您可以实质性地更改CodeIgniter内核。
因此,在这种情况下,您可以查看系统视图类,只需对其进行更改以返回已压缩的输出即可。
在您的情况下,您甚至可以添加一个额外的参数,以便视图函数可以返回压缩或不压缩的输出。
有关在CodeIgniter 4中扩展核心类的更多信息,请阅读:
https://codeigniter.com/user_guide/extending/core_classes.html#extending-core-classes
,在CodeIgniter4中,您可以通过添加以下代码inti <child-element-3 attr3="testing3">
文件来使用事件来使输出最小化(而不是像在CodeIgniter3中那样使用钩子)
app/Config/Events.php