Расширьте класс Base Yii в Yii2, чтобы добавить статические методы. - PullRequest
0 голосов
/ 25 мая 2018

Можно ли расширить класс Yii2 BaseYii, чтобы я мог добавить статический метод, похожий на Yii::t(), например: Yii::my_super_method()?

Не могу найти какую-либо документацию по этому поводу, может быть, я пропустилэто.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это возможно, создав собственный класс 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';

Но если вы хотите только добавить новый метод , вам, вероятно, не следует делать это .Переопределение базовых классов таким способом возможно, но это уродливый хак, и его следует избегать всякий раз, когда это возможно.Лучше создать собственного помощника с этим методом, чем взламывать базовые классы.

0 голосов
/ 25 мая 2018

Да, возможно продление 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();
...