首页 > 解决方案 > 扩展 Yii2 的 BaseYii 类以添加静态方法

问题描述

是否可以扩展 Yii2 的 BaseYii 类,所以我可以添加一个类似于这样的静态方法Yii::t()Yii::my_super_method()

真的找不到任何有关此的文档,也许我错过了。

标签: yiiyii2

解决方案


这可以通过创建自己的Yii类(例如在项目的根目录中)来实现:

require __DIR__ . '/vendor/yiisoft/yii2/BaseYii.php';

class Yii extends \yii\BaseYii
{
    public static function my_super_method() {
        // ...
    }
}

spl_autoload_register(['Yii', 'autoload'], true, true);
Yii::$classMap = require __DIR__ . '/vendor/yiisoft/yii2/classes.php';
Yii::$container = new yii\di\Container();

index.php通过替换将其加载到核心类中:

require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

require __DIR__ . '/../Yii.php';

但如果您只想添加一个新方法,您可能不应该这样做。以这种方式覆盖核心类是可能的,但这是丑陋的 hack,应尽可能避免。使用这种方法创建自己的助手比破解核心类更好。


推荐阅读