одинаковое действие во всех действиях контроллеров

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Alex@
Сообщения: 568
Зарегистрирован: 2014.12.16, 09:24

одинаковое действие во всех действиях контроллеров

Сообщение Alex@ »

Здравствуйте.
У меня есть определённая функция, которую необходимо выполнять во всех контроллерах и действиях.
подскажите как лучше реализовать это.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: одинаковое действие во всех действиях контроллеров

Сообщение ElisDN »

Навесить её на событие BEFORE_ACTION.
Аватара пользователя
Afganec
Сообщения: 16
Зарегистрирован: 2014.06.10, 17:26
Контактная информация:

Re: одинаковое действие во всех действиях контроллеров

Сообщение Afganec »

Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
Изображение
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: одинаковое действие во всех действиях контроллеров

Сообщение PaSiS »

Создать базовый контроллер И навесить событие beforeAction
Аватара пользователя
lesha20
Сообщения: 28
Зарегистрирован: 2014.12.09, 00:46

Re: одинаковое действие во всех действиях контроллеров

Сообщение lesha20 »

А как из этого общего действия отправлять общую переменную в шаблон (или для каждого представления)?
Например, в шапке сайта отображать баланс, содержимое корзины и т.д.?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: одинаковое действие во всех действиях контроллеров

Сообщение zelenin »

Afganec писал(а):Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
идиотизм
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: одинаковое действие во всех действиях контроллеров

Сообщение zelenin »

PaSiS писал(а):Создать базовый контроллер И навесить событие beforeAction
для контроллера из расшинрения тоже будете базовый прописывать?
Аватара пользователя
lesha20
Сообщения: 28
Зарегистрирован: 2014.12.09, 00:46

Re: одинаковое действие во всех действиях контроллеров

Сообщение lesha20 »

Щас я посоветую)
На этапе предзагрузки добавить обработчик события(глобальную функцию, метод класса, анонимную функцию и т.п.) на уровне класса, например в файл 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('Вызов нашей функции перед каждым действием контроллера');
    },
]
 
После чего, перед каждым действием контроллера будет вызываться наша функция.
disasterovich
Сообщения: 20
Зарегистрирован: 2014.01.31, 14:44

Re: одинаковое действие во всех действиях контроллеров

Сообщение disasterovich »

А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: одинаковое действие во всех действиях контроллеров

Сообщение zelenin »

disasterovich писал(а):А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
То в чем у вас будет проблема?
disasterovich
Сообщения: 20
Зарегистрирован: 2014.01.31, 14:44

Re: одинаковое действие во всех действиях контроллеров

Сообщение disasterovich »

zelenin писал(а):
disasterovich писал(а):А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
То в чем у вас будет проблема?
В шапке сайта выводятся некоторые данные, плюс они же нужны в некоторых контроллерах. Вопрос - где их хранить, если использовать как было предложено выше - обработчик события EVENT_BEFORE_ACTION
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: одинаковое действие во всех действиях контроллеров

Сообщение mkramer »

Хранить в компоненте, компонент прописать в bootstrap.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: одинаковое действие во всех действиях контроллеров

Сообщение zelenin »

disasterovich писал(а):
zelenin писал(а):
disasterovich писал(а):А если мне надо что-то из базы вытащить и куда это сохранять при обработке события?
То в чем у вас будет проблема?
В шапке сайта выводятся некоторые данные, плюс они же нужны в некоторых контроллерах. Вопрос - где их хранить, если использовать как было предложено выше - обработчик события EVENT_BEFORE_ACTION
а зачем вам вообще события? вам нужен виджет.
Аватара пользователя
Afganec
Сообщения: 16
Зарегистрирован: 2014.06.10, 17:26
Контактная информация:

Re: одинаковое действие во всех действиях контроллеров

Сообщение Afganec »

zelenin писал(а):
Afganec писал(а):Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
идиотизм
Обоснуй.
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: одинаковое действие во всех действиях контроллеров

Сообщение zelenin »

Afganec писал(а):
zelenin писал(а):
Afganec писал(а):Создать базовый контроллер, добавить в actions вашу функцию и все контроллеры наследовать от базового.
идиотизм
Обоснуй.
начнем с того, что это не подходит под условия задачи. А во вторых создание God class - херовый паттерн.
Аватара пользователя
Afganec
Сообщения: 16
Зарегистрирован: 2014.06.10, 17:26
Контактная информация:

Re: одинаковое действие во всех действиях контроллеров

Сообщение Afganec »

zelenin писал(а):
Afganec писал(а):
zelenin писал(а): идиотизм
Обоснуй.
начнем с того, что это не подходит под условия задачи. А во вторых создание God class - херовый паттерн.
Хм.. Интересная позиция
1) Почему данное решение не подходит под условие задачи?
2) Вынос функции в предка с целью глобального доступа во всех наследниках есть "God class"? :shock:

То есть, следуя логике, данное решение тоже идиотизм? Однако, здравствуйте...


ps Я не троллю, это больше просьба отписаться мастеров yii, на yii1/2 у меня не очень много опыта, по факту я мобильный разработчик
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: одинаковое действие во всех действиях контроллеров

Сообщение zelenin »

Afganec писал(а):
zelenin писал(а):
Afganec писал(а): Обоснуй.
начнем с того, что это не подходит под условия задачи. А во вторых создание God class - херовый паттерн.
Хм.. Интересная позиция
1) Почему данное решение не подходит под условие задачи?
потому что требуется выполнение некоего метода в каждом экшне. Чем тут поможет базовый контроллер с добавленным в actions экшном? плюс следующим комментом я привел пример про контроллеры расширения. Их мы не может унаследовать ни от чего.
Afganec писал(а):2) Вынос функции в предка с целью глобального доступа во всех наследниках есть "God class"? :shock:
God class - предок, созданный для сокращения кода с выносом часто употребимых функций. Наследоваться надо не для сокращения кода, а для сохранения логики.
Afganec писал(а):
То есть, следуя логике, данное решение тоже идиотизм? Однако, здравствуйте...
в отмеченном решением комменте нет ничего про наследование кроме стандартного йиишного наследования от Object или Component. Там обычный компонент, запущенный на стадии бутсрапирования приложения. Норм решение, только не о теме этого поста.

Следующий коммент оттуда лучше подойдет для автора поста.
А третий идеально решает проблему - заметьте, это решение в первом комменте тут от ElisDN.
Ответить