Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] w metodzie przejscie do metody innej klasy
Forum PHP.pl > Forum > PHP > Frameworki
terabit
Witam,

w kohanie, w pliku controllers mam folder admin...
mam klase np Page_Controller a w niej metode test()
oraz klase Post_Controller a w niej metode inny_test()

i teraz jest problem
chce zrobić coś takiego:

  1. <?php
  2. public function test() {
  3.  
  4. Post_Controller::inny_test();
  5.  
  6. }
  7. ?>


no i nie działa, pewnie dlatego ze te klasy mam w controllers/admin
gdy chce skorzystać z jakiejś klasy którą mam w controllers/ to nie ma problemu...

Pomóżcie :]
LBO
Witaj

W większości frameworków MVC taka funkcja dostępną jako forwardowanie akcji (najczęściej jako metoda forward() w kontrolerze/akcji).
Generalnie polega to na wewnętrznym ponownym uruchomieniu Dispatchera wraz ze wszystkimi dodatkami tj. hooki dla akcji.

Mam nadzieję, że znajdziesz to w Kohanie.

Pozdrawiam, Alan
terabit
niestety nie moge tego nigdzie znalezc :/ w dokumentacji nie ma :/
nrm
Raczej nie znajdzie, chyba, że przerobi się na HMVC (Pull-MVC? jezu whateva' winksmiley.jpg ) jak w tym przykładzie:

http://learn.kohanaphp.com/2008/03/05/hmvc-in-kohana/

Fachowcy twierdzą, że "strict MVC" nie pozwala na takie "myki" i dzielą to na MVC push i pull.
np. http://www.guyrutenberg.com/2008/04/26/pul...c-architecture/
Jak dla mnie: whateva' winksmiley.jpg Do teoretycznych przepychanek zawsze jest wielu chętnych winksmiley.jpg
LBO
Cytat(normanos @ 23.08.2008, 15:33:03 ) *
Do teoretycznych przepychanek zawsze jest wielu chętnych winksmiley.jpg


eee, może nie dzisiaj smile.gif

Tak, czy siak - moim zdaniem to poważne ubytek w funkcjonalności - nie istnieją przy czymś takim łańcuchy akcji.

edit: W przykładzie widzę, że na szczęście nie trudno to dorobić. Nawet na modłe innych frameworków można dodać metodę forward() w bazowym kontrolerze.
terabit
to w końcu czym jest łańcuch akcji... bo już nic nie rozumiem...

myślałem że coś takiego: biggrin.gif

  1. <?php
  2. function pokaz_liste() {
  3. // pokazujemy liste
  4. }
  5.  
  6. function dodaj_strone() {
  7. // ...
  8. $this->pokaz_liste();
  9. }
  10.  
  11. function zrob_jeszcze_cos() {
  12.  // ...
  13.  $this->dodaj_strone();
  14. }
  15. ?>


uruchamiamy zrob_cos_jeszcze i nastepnie mamy uruchomione dodaj_strone i pokaz_liste


hmmm ale moze to nie jest to smile.gif
nrm
ale wszystko o czym piszesz wykonasz w K. pamietając o tym, że:
- akcja może kończyć się wywołaniem widoku
- autoloader jest jednopoziomowy (nie używaj podkatalogów albo zmodyfikuj).
- do wywoływania stałych elementów można wykorzystać np. biblioteki
terabit
Cytat(normanos @ 23.08.2008, 16:19:03 ) *
ale wszystko o czym piszesz wykonasz w K. pamietając o tym, że:
- akcja może kończyć się wywołaniem widoku
- autoloader jest jednopoziomowy (nie używaj podkatalogów albo zmodyfikuj).
- do wywoływania stałych elementów można wykorzystać np. biblioteki


hmmm... ale pojecie akcji dobrze zrozumiałem ? - tak jak to wyżej napisałem :]
i akcja to po prostu metoda kontrolera?
LBO
Nie, nie powinieneś myśleć o akcjach jako metodach klasy będącej kontrolerem. To jest tylko specyfika Kohany. Ona ma taką architekturę - równie dobrze akcja mogła by być klasą, a kontroler tylko pojęciem.
Dispatcher się tym zajmuje, on wie gdzie szukać kontrolerów i akcji i to jego powinieneś oddelegować do tego zadania.
terabit
ok skoro autoloader jest jednopoziomowy to nie bede miał podkatalogów w controllerze.

mógłby jeszcze ktoś napisać jak to jest np. w Zend Framework ?


Dzięki za pomoc winksmiley.jpg
LBO
Cytat(terabit @ 23.08.2008, 17:04:46 ) *
mógłby jeszcze ktoś napisać jak to jest np. w Zend Framework ?

Zend_Controller_Action::_forward()
terabit
ok, wielkie dzięki za pomoc winksmiley.jpg
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.