одинаковое действие во всех действиях контроллеров
одинаковое действие во всех действиях контроллеров
Здравствуйте.
У меня есть определённая функция, которую необходимо выполнять во всех контроллерах и действиях.
подскажите как лучше реализовать это.
У меня есть определённая функция, которую необходимо выполнять во всех контроллерах и действиях.
подскажите как лучше реализовать это.
Re: одинаковое действие во всех действиях контроллеров
Навесить её на событие BEFORE_ACTION.
Re: одинаковое действие во всех действиях контроллеров
Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
Re: одинаковое действие во всех действиях контроллеров
сделать поведение
Re: одинаковое действие во всех действиях контроллеров
Создать базовый контроллер И навесить событие beforeAction
Re: одинаковое действие во всех действиях контроллеров
А как из этого общего действия отправлять общую переменную в шаблон (или для каждого представления)?
Например, в шапке сайта отображать баланс, содержимое корзины и т.д.?
Например, в шапке сайта отображать баланс, содержимое корзины и т.д.?
Re: одинаковое действие во всех действиях контроллеров
идиотизмAfganec писал(а):Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
Re: одинаковое действие во всех действиях контроллеров
для контроллера из расшинрения тоже будете базовый прописывать?PaSiS писал(а):Создать базовый контроллер И навесить событие beforeAction
Re: одинаковое действие во всех действиях контроллеров
Щас я посоветую)
На этапе предзагрузки добавить обработчик события(глобальную функцию, метод класса, анонимную функцию и т.п.) на уровне класса, например в файл bootstrap.php для advanced-приложения:
или в конфигурацию приложения:
После чего, перед каждым действием контроллера будет вызываться наша функция.
На этапе предзагрузки добавить обработчик события(глобальную функцию, метод класса, анонимную функцию и т.п.) на уровне класса, например в файл bootstrap.php для advanced-приложения:
Код: Выделить всё
<?php
use yii\base\Event;
use yii\web\Controller;
Event::on(Controller::className(), Controller::EVENT_BEFORE_ACTION, function ($event) {
Yii::trace('Вызов нашей функции перед каждым действием контроллера');
});
Код: Выделить всё
$config = [
'on beforeAction' => function ($event) {
Yii::trace('Вызов нашей функции перед каждым действием контроллера');
},
]
-
- Сообщения: 20
- Зарегистрирован: 2014.01.31, 14:44
Re: одинаковое действие во всех действиях контроллеров
А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
Re: одинаковое действие во всех действиях контроллеров
То в чем у вас будет проблема?disasterovich писал(а):А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
-
- Сообщения: 20
- Зарегистрирован: 2014.01.31, 14:44
Re: одинаковое действие во всех действиях контроллеров
В шапке сайта выводятся некоторые данные, плюс они же нужны в некоторых контроллерах. Вопрос - где их хранить, если использовать как было предложено выше - обработчик события EVENT_BEFORE_ACTIONzelenin писал(а):То в чем у вас будет проблема?disasterovich писал(а):А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
Re: одинаковое действие во всех действиях контроллеров
Хранить в компоненте, компонент прописать в bootstrap.
Re: одинаковое действие во всех действиях контроллеров
а зачем вам вообще события? вам нужен виджет.disasterovich писал(а):В шапке сайта выводятся некоторые данные, плюс они же нужны в некоторых контроллерах. Вопрос - где их хранить, если использовать как было предложено выше - обработчик события EVENT_BEFORE_ACTIONzelenin писал(а):То в чем у вас будет проблема?disasterovich писал(а):А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
Re: одинаковое действие во всех действиях контроллеров
Обоснуй.zelenin писал(а):идиотизмAfganec писал(а):Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
Re: одинаковое действие во всех действиях контроллеров
начнем с того, что это не подходит под условия задачи. А во вторых создание God class - херовый паттерн.Afganec писал(а):Обоснуй.zelenin писал(а):идиотизмAfganec писал(а):Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
Re: одинаковое действие во всех действиях контроллеров
Хм.. Интересная позицияzelenin писал(а):начнем с того, что это не подходит под условия задачи. А во вторых создание God class - херовый паттерн.Afganec писал(а):Обоснуй.zelenin писал(а): идиотизм
1) Почему данное решение не подходит под условие задачи?
2) Вынос функции в предка с целью глобального доступа во всех наследниках есть "God class"?
То есть, следуя логике, данное решение тоже идиотизм? Однако, здравствуйте...Ferro7 писал(а):http://stackoverflow.com/questions/2718 ... controller
ps Я не троллю, это больше просьба отписаться мастеров yii, на yii1/2 у меня не очень много опыта, по факту я мобильный разработчик
Re: одинаковое действие во всех действиях контроллеров
потому что требуется выполнение некоего метода в каждом экшне. Чем тут поможет базовый контроллер с добавленным в actions экшном? плюс следующим комментом я привел пример про контроллеры расширения. Их мы не может унаследовать ни от чего.Afganec писал(а):Хм.. Интересная позицияzelenin писал(а):начнем с того, что это не подходит под условия задачи. А во вторых создание God class - херовый паттерн.Afganec писал(а): Обоснуй.
1) Почему данное решение не подходит под условие задачи?
God class - предок, созданный для сокращения кода с выносом часто употребимых функций. Наследоваться надо не для сокращения кода, а для сохранения логики.Afganec писал(а):2) Вынос функции в предка с целью глобального доступа во всех наследниках есть "God class"?
в отмеченном решением комменте нет ничего про наследование кроме стандартного йиишного наследования от Object или Component. Там обычный компонент, запущенный на стадии бутсрапирования приложения. Норм решение, только не о теме этого поста.Afganec писал(а):То есть, следуя логике, данное решение тоже идиотизм? Однако, здравствуйте...Ferro7 писал(а):http://stackoverflow.com/questions/2718 ... controller
Следующий коммент оттуда лучше подойдет для автора поста.
А третий идеально решает проблему - заметьте, это решение в первом комменте тут от ElisDN.