Возможно ли изменить класс действий Yii2
каким-то образом, похожим на то, как вы можете установить класс многих других компонентов в файле конфигурации?
Я хочу расширить этот класс, чтобы добавить в него еще одну переменную-член .
Наверное, я мог бы просто добавить его в любом случае динамично, но предпочел бы делать это по-надлежащему.
Изменить: если посмотреть на список основных компонентов приложения, он не указан, поэтому не уверен, что это возможно?
Правильный способ решения этой проблемы состоит в том, чтобы расширить классы контроллера и действия. Если вы посмотрите на исходный код, yii\base\Controller
имеет метод createAction
который, если никакого действия класса не будет найден, создаст экземпляр InlineAction
.
Поскольку вы расширяете какой-либо класс контроллера каждый раз, когда вы создаете собственный контроллер ( class MyController extends Controller
), вы можете просто переопределить оригинальный метод createAction
и в нем использовать собственную реализацию класса InlineAction
.
Это можно сделать с помощью карты классов
Yii::$classMap['yii\base\InlineAction'] = '@common/InlineAction.php';
и должны быть помещены в index.php
, прежде чем приложение будет запущено.
Независимо от его местоположения, common/InlineAction.php
должен иметь такое же пространство имен common/InlineAction.php
yii\base
что и исходный класс.