Polski support
KohanaPHP Framework
FORUM Polskiego Supportu KOHANA Framework
10 Wrzesień 2010, 11:59 *
Witamy, Gość. Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: 18.10.2009 - wydanie 3.0.1
Strony: [1]   Do dołu
  Drukuj  
Autor Wątek: Kaskadowość  (Przeczytany 103 razy)
jedre
Zaawansowany użytkownik
****
Offline Offline

Wiadomości: 429


Sex Drugs and PHP


Zobacz profil WWW
« : 21 Lipiec 2010, 18:40 »

Jak to jest z tą kaskadowością w Kohanie? W application/helpers mam utworzony plik MY_url.php - rozszerzałem ten helper o własną metodę.
Dzisiaj użyłem modułu, który również rozszerza ten helper i wygląda na to że moje rozszerzenie nadpisuje rozszerzenie modułu.

Jak to pogodzić?
Zapisane

mck
NKTeam
Ekspert
*
Online Online

Wiadomości: 712



Zobacz profil
« Odpowiedz #1 : 21 Lipiec 2010, 19:05 »

zmienić nazwę helpera?
Zapisane
jedre
Zaawansowany użytkownik
****
Offline Offline

Wiadomości: 429


Sex Drugs and PHP


Zobacz profil WWW
« Odpowiedz #2 : 21 Lipiec 2010, 19:41 »

no tak tylko ze używałem go już trochę tu i ówdzie i zmieniać odwołania teraz jakoś mi nie na rękę Mrugnięcie
Zapisane

mck
NKTeam
Ekspert
*
Online Online

Wiadomości: 712



Zobacz profil
« Odpowiedz #3 : 21 Lipiec 2010, 22:24 »

dużo funkcji Ci nadpisuje? może warto zmienić nazwę helpera w module?
Zapisane
jedre
Zaawansowany użytkownik
****
Offline Offline

Wiadomości: 429


Sex Drugs and PHP


Zobacz profil WWW
« Odpowiedz #4 : 21 Lipiec 2010, 23:40 »

W module są bodajże 3 funkcje w moim 1, niemniej jednak jeżeli jedynym rozwiązaniem jest zmiana nazwy helpera to trochę przesrane.

W końcu idzie to tak: System -> Modules -> Application i chyba powinno scalać wszystkie różne funkcje i nadpisywać nadpisywane a nie tak że funkcje z helpera w Modules są w ogóle niewidoczne.

Jak rozszerzamy własny helper w Application to nie nadpisuje on systemowego.
Hmm, tak mi teraz naszło na myśl a może ten helper w application powinien rozszerzać helper z Modules tylko jak to zapisać, tak?:
class url extends ??? {}

No ale mniejsza chyba i tak trzeba będzie podłubać w nazwach.
Zapisane

Maciek
Zaawansowany użytkownik
****
Online Online

Wiadomości: 428



Zobacz profil
« Odpowiedz #5 : 22 Lipiec 2010, 00:08 »

W końcu idzie to tak: System -> Modules -> Application
Jest dokładnie odwrotnie i nie jest tak, że coś jest scalane - jak dziedziczysz to dziedziczysz, jak zastępujesz (kaskadowość) to zastępujesz. Dziwi mnie zacytowany fragment w kontekście Twojego stażu z Kohaną. Uśmiech Pewnie już późno jest.

Poniższy schemat doskonale obrazuje kaskadowość. Tworząc coś w folderze aplikacji (lub w module) masz możliwość rozszerzenia (odziedziczenia) lub zastąpnienia klasy systemowej KO. Masz więc możliwość zrobienia czegoś dedykowanego dla danej aplikacji (rozszerzenie lub zastąpienie w aplikacji; wiele aplikacji współdzielących moduły i system) lub dla całego zbioru aplikacji (jako moduł).

Flow jest zawsze taki:
  • aplikacja (przesłania moduły i system)
  • moduły (przesłania system)
  • system

« Ostatnia zmiana: 22 Lipiec 2010, 07:44 wysłane przez Maciek » Zapisane
nediam
Aktywny użytkownik
***
Offline Offline

Wiadomości: 188


Zobacz profil
« Odpowiedz #6 : 22 Lipiec 2010, 11:21 »

Jednym słowem mylisz kaskadowość z dziedziczeniem Mrugnięcie
Zapisane

jedre
Zaawansowany użytkownik
****
Offline Offline

Wiadomości: 429


Sex Drugs and PHP


Zobacz profil WWW
« Odpowiedz #7 : 22 Lipiec 2010, 12:18 »

Jak zwał tak zwał Język

Sytuacja 1
Tworzymy helper "MY_url" w application, który powinien przesłonić helper "url" w "system".
Działa to tak, że jeżeli w MY_url rozszerzam jakąś funkcję z "url" lub tworzę zupełnie nową to wszystkie pozostałe funkcje z "url" (z systemowego) są ciągle widoczne i dostępne.

Sytuacja 2
Mam helper MY_url w modules, całość działa tak samo jak w sytuacji 1.

Sytuacja 3
Mam helper MY_url w modules i ten sam w application, w tej sytuacji widoczne są tylko metody z helpera w application i system, metody z helpera w modules są niedostępne.

Może i to nie jest jakieś dziwne i było tak zawsze ale natknąłem się na to dopiero teraz bo:
- potrzebuję rozszerzyć helper url specjalnie dla tej aplikacji (robię to w application)
- korzystam z modułu który na swoje potrzeby rozszerza helper url

Oczywiście mógłbym inaczej nazwać swój helper, ale realizował on zadania związane z URL dlatego postanowiłem rozszerzać url.

W sumie to mniejsza o to, ważne że się co nieco wyjaśniło Uśmiech
Zapisane

Strony: [1]   Do góry
  Drukuj  
 
Skocz do: