Хуки в yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
sl1p
Сообщения: 5
Зарегистрирован: 2012.02.12, 12:45

Хуки в yii

Сообщение sl1p »

Всем доброго времени суток!

Есть некая задача, для решения которой никак не могу выбрать правильный способ (перфекционизм мучает :))

Есть модели:

Код: Выделить всё

Plans
Invoices
Необходимо следующее:

При сейве Invoices оповестить об этом Plans (т.е. инвойс оплачен, нужно активировать план).
Использовать существующие Events в Yii (как показано в большинстве примеров о том как их использовать) не вижу возможности, потому как при екшене сохранения инвойса никаким образом не присутствует план и посему нельзя прицепить к нему событие.

Идея реализации:

Сделать механизм глобальных хуков.
Т.е. создается компонент (Hooks) который прелоадится при ините приложения и читает файл, пусть это будет protected/config/hooks.php.
В этом файле вешаются события, к примеру:

Код: Выделить всё

// hooks.php

Yii::app()->hooks->onInvoicePaid('Plan', 'onInvoicePaidHandler');
Инвойс в свою очередь файрит событие onInvoicePaid

-------

Возможно у Вас есть какие-то идеи (как можно решить этот вопрос без глобальных хуков, как бы сделали Вы)?
NEW_NAME
Сообщения: 216
Зарегистрирован: 2013.07.15, 09:52

Re: Хуки в yii

Сообщение NEW_NAME »

а в модели beforeSave(), afterSave() чем не подходят?
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Хуки в yii

Сообщение TM123 »

NEW_NAME писал(а):а в модели beforeSave(), afterSave() чем не подходят?
Думаю повернутостью на чистоту идеи MVC, в моделе создавать другую модель да еще менять данные в ней - это же должно делаться в контроллере :)
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Хуки в yii

Сообщение TranceSmile »

Ну если не хочется в модели создавать другую модель. То можно сделать статический метод активации.
Изображение
sl1p
Сообщения: 5
Зарегистрирован: 2012.02.12, 12:45

Re: Хуки в yii

Сообщение sl1p »

Я прошу прощения, забыл уточнить что инвойс может быть оплачен не только для плана.
Т.е. несколько разных моделей в которых что-то происходит после оплаты (у каждой конкретной модели есть invoice_id). Я думаю явно их вызывать в инвойсе не совсем "чисто".
Если вдруг я добавлю еще одну модель зависящую от оплаты инвойса, придется менять код модели инвойса (мне вот это муляет) :)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Хуки в yii

Сообщение slavcodev »

У разве Invoice::relations() не содержит в себе все связанные модели? Если да, то значит модель Инвойс знает и о плане и о других. Так что смело можно вешать на них ивенты.

Вариант второй вешать ивенты на успешное действие контроллера.
Жду Yii 3!
NEW_NAME
Сообщения: 216
Зарегистрирован: 2013.07.15, 09:52

Re: Хуки в yii

Сообщение NEW_NAME »

Вообще как ни крути, будет какой-то код, который будет меняться. Этот код будет привязан так или иначе к модели инвойса. Как ни крути, как ни изворачивайся, связь всегда будет, всегда что-то придется менять.
ineersa
Сообщения: 28
Зарегистрирован: 2013.10.31, 15:30

Re: Хуки в yii

Сообщение ineersa »

Возможно вынести в триггер и забыть об этом?
Ответить