выполнение действий до (preDispatch) и после (postDispatch) действия (Action)
Всем привет. В этой статье я хочу поделится с Вами о том как выполнять какие-то действия до/после выполнения действий в методе Action контроллера.
Для чего это может понадобится? Ну например, перед тем как делать действия вам необходимо удостоверится залогинелся пользователь или нет. Конечно можно в каждом методе Action проверять залогинелся ли юзер или нет, но при таких условиях и в зависимости от громоздкости Вашего приложения необходимо это условие прописывать во всех методах, это не удобно, а вдруг Вы решите как-то сменить метод проверки на залогиненность, что тогда? Переписывание всех условия. Для решения данной задачи, можно создать контроллер который будет наследоваться от Zend_Controller_Action и в этом контроллере будет метод preDispatch или postDispatch которые будут делать действия до или после выполнения действий в самом экшене.
class BaseController extends Zend_Controller_Action { /** * Pre-dispatch routines * * (non-PHPdoc) * @see Site/branch/Lib/Zend/Controller/Zend_Controller_Action#preDispatch() */ public function preDispatch() { $auth = Zend_Auth::getInstance(); $userAuth = $auth->getStorage()->read(); if (isset($userAuth->Id)) { $this->_redirect('/'); } } } class Module_IndexController extends BaseController { public function indexAction() { // какие-то свои действия } }
такие же работает и метод postDispatch.
Дешевая техника в интернет-магазине http://bestchinashops.ru/chinabuye/
Есть еще:
метод init() — этот метод выполняет действия вообще до метода preDispatch.
метод Render() — этот метод рисует данные вьюхи.
более подробно о всех методах вот тут — Контроллеры действий
Также мне было интересно в какой последовательности выполняются различные служебные методы, ниже приведена табличка:
позиция | метод |
1 | __construct |
2 | init |
3 | preDispatch |
4 | indexAction |
5 | postDispatch |
Именно в такой последовательности запускаются методы. Юзайте на здоровье.
Статья просмотренна 42609 раз, зашло посетителей 10528