Как добавить свои свойства во View от Yii2? Добрый день.
Для всего приложения хочу во View на ряду с View->title, добавить ещё View->subTitle.
Первое решение, которое пришло в голову - наследоваться от yii\web\View, добавить в наследника новое свойство и переопределить базовый класс View на свой через classMap. Но вычитал что такое решение является "грязным хаком".
В связи с этим вопрос: Как расширить базовый класс View своими свойствами кошерно? Или, возможно, я напрасно всё усложняю и есть какой то уже готовый способ?
Заранее спасибо всем ответившим.

21 Авг 2019 в 07:01
191 +1
0
Ответы
1

Добрый день! Для расширения базового класса View и добавления своих свойств вы можете воспользоваться концепцией декоратора.
Создайте новый класс, который будет расширять базовый класс View и добавлять новое свойство subTitle. Например:

namespace app\components;
use Yii;
class MyView extends \yii\web\View
{
public $subTitle;
public function init()
{
parent::init();
$this->subTitle = 'Default Subtitle';
}
}

После этого, в конфигурации приложения (fie config/web.php) замените класс View на ваш новый класс MyView:

'components' => [
'view' => [
'class' => 'app\components\MyView',
],
],

Теперь у вас будет доступ к свойству subTitle во всех ваших View:

<?= $this->subTitle ?>

Это более красивое и правильное решение, чем использование "грязных хаков". Надеюсь, что это поможет вам реализовать вашу задачу. Если у вас возникнут дополнительные вопросы, не стесняйтесь их задать. Всегда рад помочь.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 956 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир