Переопределение классов в Yii2 через автолоадер yii framework
Данный прием можно охарактеризовать, как "грязный хак", но иногда он бывает чрезвычайно полезен. Например, когда изменить работу стороннего класса, который много где используется (в том числе, в библеотеках третьих лиц).
Итак, допустим нам необходимо изменить класс yii\db\ActiveRecord
, чтобы каждый его наследник имел определенное поведение. Для этого мы копируем его в директорию своего приложения (например, в @app/models/ActiveRecord.php
) и дописываем в него свою реализацию. Важно! Необходимо оставить старый namespace
и название класса, иначе ничего работать не будет.
Теперь, когда класс готов, необходимо заменить им базовый. Осуществляется это заменой значения по ключу в Yii::$classMap
.
Yii::$classMap['yii\db\ActiveRecord'] = '@app/models/ActiveRecord.php';
Данный код вы можете разместить где вам потребуется, но, как правило, его помещают во входной скрипт index.php
.
Все готово! Данная возможность переопределения классов доступна благодаря автолоадеру Yii
.
Использовать данный хак или нет - ваше решение, но знать о такой возможности не будет лишним.