扩展Yii2的BaseYii类以添加静态方法

时间:2018-05-25 13:43:47

标签: yii yii2

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

无法找到任何关于此的文档,也许我错过了它。

2 个答案:

答案 0 :(得分:1)

这可以通过创建自己的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';

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

答案 1 :(得分:0)

是的,可以延长BaseYii课程。显示如下

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();