Ehh dziwna sprawa...przez tydzień nie mogłem się z tym uporać a minutę po stworzeni tego posta coś ruszyło hehe
Jednakże nie działa to do końca tak jak bym chciał. W AppControllerze zdefiniowaną mam metodę _setBodyClass(). Jeśli używam jej w poszczególnych kontrolerach (wywołując je w metodzie beforeFilter() ) to wszystko działa jak trzeba, jednak kiedy wywołam ją w beforeFilter app_controllera to skrypt się wysypuje. Problem leży chyba w metodzie set() ale nie całkiem rozumiem dlaczego. Oto kod app_controllera wraz z tą funkcją :
<?php
class AppController extends Controller {
var $helpers = array('Events', 'Bbcode', 'Form', 'Session', 'Core'); var $uses = array('Event'); var $components = array('FileHandler', 'Session', 'Auth');
function beforeFilter()
{
/** Authentication **/
#Security::setHash("md5");
$this->Auth->fields = array('username' => 'username', 'password' => 'user_password'); $this->Auth->loginAction = '/users/login';
$this->Auth->loginRedirect = '/';
$this->Auth->logoutRedirect = '/';
$this->Auth->loginError = 'Invalid e-mail / password combination. Please try again';
$this->Auth->authorize = 'controller';
/** end of authentication **/
$this->Auth->allow("*");
}
/**
* Ustawia klasę <body> zależną od aktualnie wyświetlanej metody
*
*/
function _setBodyClass()
{
if($this->params['action'] == 'browse')
$this->set('body_class', 'browse');
if($this->params['action'] == 'view')
$this->set('body_class', 'view-event');
if($this->params['action'] == 'add')
$this->set('body_class', 'add-event');
if($this->params['action'] == 'edit')
$this->set('body_class', 'add-event');
if($this->params['action'] == 'search')
$this->set('body_class', 'browse');
if($this->params['controller'] == 'users' && $this->params['action'] == 'login')
$this->set('body_class', 'add-event');
} }
Podobnie sprawa wygląda jeśli zechcę zdefiniować jakąś zmienną w beforeFilter app_controllera, np :
$this->set('zmienna', $wartosc)
$zmienna nie będzie widziana z poziomu widoków
Kod kontrolera wygląda następująco (wyciąłem zbędne fragmenty) :
<?php
Class EventsController extends AppController {
function beforeFilter()
{
$this->_setBodyClass();
$this->_redirectSearch();
// Pobieranie koncertów patronowanych
$this->set('premiumEvents', $this->Event->getPremium());
$this->Auth->allow("*");
}
}
edit:
niestety dodanie parent::beforeFilter() nic nie dało