MyTetra Share
Делитесь знаниями!
Переопределение классов в Yii2 через автолоадер yii framework
Время создания: 13.07.2018 15:30
Текстовые метки: php yii2 class map
Раздел: PHP - Yii2
Запись: Velonski/mytetra-database/master/base/1490958726dkj08kfib2/text.html на raw.githubusercontent.com

Данный прием можно охарактеризовать, как "грязный хак", но иногда он бывает чрезвычайно полезен. Например, когда изменить работу стороннего класса, который много где используется (в том числе, в библеотеках третьих лиц).

Итак, допустим нам необходимо изменить класс yii\db\ActiveRecord, чтобы каждый его наследник имел определенное поведение. Для этого мы копируем его в директорию своего приложения (например, в@app/models/ActiveRecord.php) и дописываем в него свою реализацию. Важно! Необходимо оставить старыйnamespace и название класса, иначе ничего работать не будет.

Теперь, когда класс готов, необходимо заменить им базовый. Осуществляется это заменой значения по ключу вYii::$classMap.

?

1
Yii::$classMap['yii\db\ActiveRecord'] = '@app/models/ActiveRecord.php';

Данный код вы можете разместить где вам потребуется, но, как правило, его помещают во входной скриптindex.php.

Все готово! Данная возможность переопределения классов доступна благодаря автолоадеру Yii.

Использовать данный хак или нет - ваше решение, но знать о такой возможности не будет лишним.

Так же в этом разделе:
  • Array validation
  • Переопределение классов в Yii2 через автолоадер yii framework
 
MyTetra Share v.0.59
Яндекс индекс цитирования