扩展 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 更好。
是否可以扩展 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 更好。