是否可以扩展Yii2的BaseYii类,所以我可以添加类似于Yii::t()
的静态方法,如下所示:Yii::my_super_method()
?
无法找到任何关于此的文档,也许我错过了它。
答案 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();