Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Problem z AppController
Forum PHP.pl > Forum > PHP > Frameworki
Bajki
Witam,
Mam pewien problem z kontrolerem aplikacji. Stworzyłem plik app_controller.php w folderze /app/

Oto kod tego pliku :

  1. <?php
  2. class AppController extends Controller {
  3.  
  4. var $helpers = array('Session');
  5. var $uses = array('Event');
  6.  
  7. function beforeFilter()
  8. {
  9. $this->set('premiumEvents', $this->Event->getPremium());
  10. echo 'xx';
  11. }
  12.  
  13.  
  14. }


Cake tak jak by nie widzi tego pliku. Niedośc, że podczas wywoływania poszczególnych metod zmienna $premiumEvents nie istnieje (z poziomu widoków) to jeszcze na stronie nie pojawia się ciąg znaków 'xx'.

Czy macie może jakiś pomysł co może być nie tak ?

Pozdrawiam i z góry dziękuje za pomoc smile.gif
Gryf
hmm.. a jak wygląda kod kolejnego kontrolera - który wywołujesz?


add..
z dokumentacji
Cytat
Please also remember to call AppController's callbacks within child controller callbacks for best results:
Kod
function beforeFilter(){
     parent::beforeFilter();
}
Bajki
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ą :

  1. <?php
  2. class AppController extends Controller {
  3.  
  4. var $helpers = array('Events', 'Bbcode', 'Form', 'Session', 'Core');
  5. var $uses = array('Event');
  6. var $components = array('FileHandler', 'Session', 'Auth');
  7.  
  8. function beforeFilter()
  9. {
  10.  
  11. /** Authentication **/
  12.  
  13. #Security::setHash("md5");
  14. $this->Auth->fields = array('username' => 'username', 'password' => 'user_password');
  15. $this->Auth->loginAction = '/users/login';
  16. $this->Auth->loginRedirect = '/';
  17. $this->Auth->logoutRedirect = '/';
  18. $this->Auth->loginError = 'Invalid e-mail / password combination. Please try again';
  19. $this->Auth->authorize = 'controller';
  20.  
  21.  
  22. /** end of authentication **/
  23.  
  24. $this->Auth->allow("*");
  25. }
  26.  
  27. /**
  28. * Ustawia klasę <body> zależną od aktualnie wyświetlanej metody
  29. *
  30. */
  31. function _setBodyClass()
  32. {
  33. if($this->params['action'] == 'browse')
  34. $this->set('body_class', 'browse');
  35. if($this->params['action'] == 'view')
  36. $this->set('body_class', 'view-event');
  37. if($this->params['action'] == 'add')
  38. $this->set('body_class', 'add-event');
  39. if($this->params['action'] == 'edit')
  40. $this->set('body_class', 'add-event');
  41. if($this->params['action'] == 'search')
  42. $this->set('body_class', 'browse');
  43. if($this->params['controller'] == 'users' && $this->params['action'] == 'login')
  44. $this->set('body_class', 'add-event');
  45.  
  46. } }


Podobnie sprawa wygląda jeśli zechcę zdefiniować jakąś zmienną w beforeFilter app_controllera, np :
  1. $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) :
  1. <?php
  2.  
  3. Class EventsController extends AppController {
  4.  
  5.  
  6. function beforeFilter()
  7. {
  8. $this->_setBodyClass();
  9. $this->_redirectSearch();
  10.  
  11. // Pobieranie koncertów patronowanych
  12. $this->set('premiumEvents', $this->Event->getPremium());
  13.  
  14. $this->Auth->allow("*");
  15. }
  16. }


edit:
niestety dodanie parent::beforeFilter() nic nie dało
Gryf
hmm...
zbytnio nie jestem zaprzyjaźniony z cake ale z tego co widzę to w EventsController brakuje
Kod
var $name = 'Events';
Bajki
Niestety też nic nie dało. To jest ogólnie bardzo tajemnicza sprawa bo miałem jeden skrypt z działającym app_controllerem na localhoscie, zduplikowałem folder z cakiem (czyli pracuje dokładnie na takich samych plikach co przy tamtym działającym projekcie) i jakimś cudem tutaj app_controller szwankuje

***edit
ok przepisałem wszystko od nowa pod najnowszego Cake-a i wszystko działa. Chyba miałem zainstalowaną jakąś osobliwą wersję i stąd te problemy winksmiley.jpg Dzięki za chęć pomocy!
woj_tas
w kontrolerze EventsController w metodzie beforeFilter nie miałeś:

  1. parent::beforeFilter();
VegetaSSJ
wstawianie zmiennych do widoku powinieneś przenieś do beforeRender()
Gryf
Cytat(Bajki @ 6.07.2010, 10:09:01 ) *
***edit
ok przepisałem wszystko od nowa pod najnowszego Cake-a i wszystko działa. Chyba miałem zainstalowaną jakąś osobliwą wersję i stąd te problemy winksmiley.jpg Dzięki za chęć pomocy!


Problem został rozwiązany.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.