Допустим я хочу обратывать в контролере различные акции (actionCatalog, actionOrder и т.п.), но потом я хочу, чтобы выполнялся метод общий для всех акций. Это возможно?
Допустим я хочу обратывать в контролере различные акции (actionCatalog, actionOrder и т.п.), но потом я хочу, чтобы выполнялся метод общий для всех акций. Это возможно?
Полагаю данный метод стоит использовать:
http://www.yiiframework.com/doc/api/CController#afterAction-detail
Конечно у слова action есть много различных переводов, но в контексте фреймворка оно означает “действие” (действие “добавить пост”, действие “удалить пост” и т.д.). Или я чего-то не знаю?
Ух ты ! Спасибо за подсказку. Вставил в контроллер вот такую штуку:
protected function afterAction($action)
{
if ($action->id=='index')
PHPMailer_main::mail_to_sms('index');
...
...
...
}
и все прекрасно работает, не надо возиться с каждым действием…
Ага, это оно. И заодно и другим пригодилось:
Спасибо!
чтобы не следить за наследованием afterAction в контролере и вообще с точки зрения расширяемости можно использовать фильтры
http://www.yiiframework.com/doc/api/CController#filters-detail
Пример:
/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
array('ESetReturnUrlFilter + admin, view',),
);
}
<?php
/**
* SetReturnUrl Filter
*
* Keep current URL (if it's not an AJAX url) in session so that the browser may
* be redirected back.
* @version 1.0.2
* @author creocoder <creocoder@gmail.com>
*/
class ESetReturnUrlFilter extends CFilter
{
protected function preFilter($filterChain)
{
$app=Yii::app();
$request=$app->getRequest();
if(!$request->getIsAjaxRequest())
$app->getUser()->setReturnUrl($request->getUrl());
return true;
}
}