扩展 Yii2 的 BaseYii class 添加静态方法

Extend Yii2's BaseYii class to add static methods

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

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

是的,可以扩展 BaseYii class。显示在下方

namespace app\models;

class ClassName extends \yii\BaseYii
{
     public static function my_super_method()
     {
         ......
         Here your code
         ........ 
     }
}

现在像

一样访问你的方法
app\models\ClassName::my_super_method();

现在访问t()方法

app\models\ClassName::t();

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

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 而不是核心 class,方法是替换:

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

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

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