Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%)
|
Witam wszystkich,
Ostatnio zacząłem czytać o obiektowym php5, MVC, frameworkach i postanowiłem zacząć pisać kod, który byłby dla mnie wygodny oraz co ważne - nadawał się do powtórnego wykorzystania. Opiszę to co do tej pory zrobiłem. Proszę Was, znaczniej bardziej doświadczonych programistów, o uwagi na temat mojego podejścia. Zaznacze, że swoją pracę oparłem do tej pory na artykule Frameworki z php.pl, framework CakePHP oraz o wypowiedzi forumowiczach w topikach MVC. Charakterystyka ogólna: Drzewo projektu Kod |- actions/ (tu wrzucam kontrolery w postaci class.NazwaKontrolera.php) |- conf/ |- models/ (tu będą modele, do tej pory nic tam nie mam) |- lib/ | +-- core/ - tu są moje pliki wykorzystywane w całej aplikacji | +-- class.Dispatcher.php | +-- class.Controller.php |- templates/ - szablony Smarty | |- index.php Oczywiście nie jest to finalny widok drzewa projektu. Ale nie to jest ważne. Jak działa mój framework? index.php uruchamia Dispatcher, który parsuje URL. Jeżeli następuje zgłoszenie index.php/Akcja1/Parametr1/Parametr2/, to dispatcher załącza kontroler Akcja1, a następnie kontroler tej akcji wywołuje na sobie (w zasadzie na potomku) metodę Parametr1 z parametrem Parametr2. Przykład: strona.pl/index.php/Uzytkownik/Pokaz/1234. Dispatcher przekaże kontrolę do kontrolera Uzytkownik. Ten natomiast włączy metodę Pokaz(1234); Generalnie wygląda to właśnie tak. Z tego co czytałem, to chyba całkiem logiczne rozwiązanie. Oczywiście mogę się mylić... Pliki
Będę Wam ogromnie wdzięczny za uwagi. Pozdrawiam serdecznie, Adrian. Ten post edytował Prph 4.03.2006, 19:40:41 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%)
|
Przeczytajcie na końcu!. Jak rozwiąć Widok?
Witam, ja rozwizalem to tak: w index.php laduje FrontController. Pierwsza czynnoscia jaka on wykona bedzie wydobycie informacji, jaka akcje powinien odpalic. Tym zajmie sie obiekt klasy URL. za pomoca metod getActionName() i getParameters() zwraca odpowiednie dane. Majac juz nazwe akcji, Front kontroler wczytuje konfiguracje dla akji. Uruchamiany jest takze mechanizm autoryzacji, jezeli w konfiguracji bylo podane ze akcja jej wymaga. Po przejsciu testow, zwyczajnie ladowana jest klasa, tworzony obiekt i wykonywana na nim metoda run(); Co robi run()? 1. Wybiera dla siebie model. 2. Wybiera dla siebie widok. 3. Wykonuje jakies dzialania 4. zwraca albo true, kiedy akcja sie powiedzie, albo tablice parametrow dla kolejnej akcji, albo false jak cos sie popsuje. Znowu wszystko wraca do kontrolera. Ten czyta konfig czy ma wykonac nastepna akcje i czy ma jej przekazac parametry. Dane zwrotne z poprzedniej akcji ma, wiec reszta juz jest banalna. Framment kontrolera glownego:
Metoda prywatna _prepareAction($name) po prostu sprawdza czy pliki akcji istnieja, dlaczaje, tworzy obiekt i go zwraca. Przykladowa akcja:
Klasa ta dziedziczy po Action. Wszystkie akcje we frameworku musza z niej dzidziczyc.. No chyba ze ktos woli swoje pisac (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Jezeli podano url postaci strona.pl/JakasAkcja/Opcja1/Opcja1/ to klasa nadrzedna Action zwroci w tej chwili tablice array(Opcja1, Opcja2). Parametry przekazywane sa do konstruktora Action we Front kontrolerze.
Co robia te metody nadrzednej klasy Action? Tworza obiekty Modelu i widoku, dostepne pozniej za pomoca:
Klasa widoku
Klasa dziedziczy z HtmlView, ktora u mnie w zasadzie jest jakby aliasem do SmartyView. Klasa SmartyView|
No to tak wyglada to z grubsza. Przepraszam, za brak komentarzy, ale zaraz musze isc na basen :/ Ktos powie, ze to nie tak, ze inaczej, po co tak... MVC mowi - masz miec model i widok, ktore nie sa w jednym miejscu. A kontroler ma pomoc im nawiazac miedzy nimi wspolprace. Wydaje mi sie, ze moje rozwiazanie jest calkiem wygodne. Oczywiscie sporo brakuje tutaj do funkcjonalnosci. Obecnie mecze mechanizm autoryzacji, obslugi sesji itp. Pozdrawiam, Adrian. Jak rozwiązać widok? Teraz, kiedy napisałem już większość bazowego kodu, stanął przede mną problem rozsądnego rozwiązania klasy widoku. Chciałbym aby moj Framework był przystosowany do różnego rodzau widoków. Oczywiste jest, że najczęściej wykorzystam widok HTML, ale może się także pojawić widok samego pliku - tzn. akcja w wyniku swojego działania zwróci plik, chociażby obraz który zostanie wysłany wraz zodpowienim nagłówkiem do odbiorcy (prawdopodobnie przeglądarki). W związku z tym zasada jest taka: FrontController->Akcja->wykonaj czynnosci->uruchom widok. Do przeglądarki nie tarfi nic, jeżeli akcja niczego takiego nie zwróci. Jest to normalne rozwiązanie, a do tego dosyć skuteczne, bo wiadome jest, że aby do przeglądarki wysłać naglówki to nic innego wcześniej nie może być wysłanego. Problem pojawia się przy widoku HTML. Wiadomo przecież, że zwrócenie tabelek z newsami, czy fotek z galerii nie wystarczy - trzeba to ubrać w nagłówek, stopkę, tytuł strony itp. Bez senu jest, aby szablon newsow zawierał to wszystko w sobie. Rozwiązanie nasuwa się dosyć szybko - niech każdy widok HTML dziedziczy po jakimś widoku, który ubierze zwrócone dane z akcji w nagłowej, stopkę itp. I to by działało całkiem sprawie. Jest jedno ale. Mój framework będzie dawał możliwość łańcuchów akcji. A działało to będzie tak: Front Kontrole->Akcja->wykonaj jeżeli w konfigu podano, ze ma wykonac nasteona akcje to ja wykonuje itd. Jezeli tylko otatnia akcja jest widokiem HTML, a poprzednie to tylko działanie na modelu to jest ok: Akcja ZapiszNewsa zapisuje newsa w bazie. Nic sie nie wyswietla - nie korzysta z zadnego widoku. Nastepna akcja to PokazNewsy PokazNewsy Wyswietla newsy z bazy danych W rezultacie na ekranie pojawia sie wynik PokazNewsy - i tylko ten wynik. Ale możliwe jest aby wykonac kilka akcji z widokiem. W takim przypadki nie ma mowy, aby obie akcje wyswietlały całą stronę... Jak można to rozwiązac? Pozdrawiam, Adrian. Ten post edytował Prph 25.03.2006, 13:54:50 |
|
|
|
Prph Zalążek frameworka z MVC 4.03.2006, 16:02:14
sf Brak komentarzy, miales jakis pomysl, ale nie kazd... 4.03.2006, 18:07:56
matid Cytat(sf @ 2006-03-04 18:07:56)Pozatym nie ba... 4.03.2006, 18:56:02
Prph Diękują za uwagi.
Co do die() - faktycznie nie p... 4.03.2006, 19:52:05
Fipaj Ten pomysł z Dispatcherem mi się nie podoba.
Czem... 4.03.2006, 19:58:25
Prph Ale przeciez w praktyce to tak działa
Ale chyba ... 4.03.2006, 20:26:36
matid We wzorcu MVC kontroler to część aplikacji odpowie... 4.03.2006, 20:51:50
Ociu Ja sobie podzieliłem to tak:
Kodframework
- Web
... 5.03.2006, 09:12:40
Prph Teraz raz jeszcze przeczytalem Wprowadzenie do MVC... 5.03.2006, 10:14:11
hwao W ogole brak Ci widoku w tym frameworku.
Glupio j... 5.03.2006, 10:24:42
matid U mnie to wygląda tak:
index.php:
W tym pliku two... 5.03.2006, 10:51:08
Prph Witam
Widzę, że niechętnie podchodzicie do mojej... 5.03.2006, 16:47:05
Ociu Widze, że czekasz aż ktoś rzuci kodem.[PHP] pobier... 7.03.2006, 14:59:34
Prph Przejrzałem kod Phienda, poczytałem dokumentacje, ... 9.03.2006, 23:24:05
hwao czemu u Ciebie akcja wlacza Model i Widok?
Pr... 10.03.2006, 06:48:18
Prph Yyyyy? A to co ma włączać model i widok?
Ludzie cz... 10.03.2006, 07:54:17
sf Hyh, w ostatnim php Solutions jest fajnie napisane... 10.03.2006, 09:03:36
mike_mech Cytat(Prph @ 2006-03-10 07:54:17)Yyyyy? A to ... 10.03.2006, 09:09:42
Martio Cytat(mike_mech @ 2006-03-10 10:09:42)Hyh, w ... 10.03.2006, 12:28:05
hawk Żaden nie trzymał się zasad wzorca MVC? Bo to zale... 10.03.2006, 14:51:59
Martio CytatI dlaczego to, że jakiś framework nie trzyma ... 10.03.2006, 15:40:32
Vengeance Akcja to po prostu część kontrolera. Ponieważ kont... 10.03.2006, 15:57:25
Martio Dobra, ale jak obiektowo w takim bądź razie zakodo... 10.03.2006, 20:41:56
DeyV W takim momencie okazuje, się, że wydzielenie z ko... 10.03.2006, 22:34:27
Prph No proszę... Najpierw ktoś mówi, że akcja nie ster... 11.03.2006, 00:51:03
DeyV Pamiętaj o jednej rzeczy.
MVC nie mówi, jak ma b... 11.03.2006, 01:57:31
Prph No dobrze, a teraz juz troche idac w przyszlosc...... 11.03.2006, 10:42:13
eMartio Zerknijcie na to. Czeskie, ale myślę, że dobre roz... 11.03.2006, 13:14:35
Martio Chciałbym jeszcze powrócić do akcji. Powiedzmy, że... 11.03.2006, 14:04:49
aleksander [PHP] pobierz, plaintext <?phpclass Kontroler... 11.03.2006, 14:39:03
Prph Ha! A to całkiem ciekawe rozwiązanie.
A jeszc... 11.03.2006, 18:01:49
hwao zalezy jakie to dane...
konfiguracja aplikacji de... 11.03.2006, 18:34:17
Prph Cytat(hwao @ 2006-03-11 17:34:17)konfiguracja... 11.03.2006, 20:07:57
hwao Cytat(Prph @ 2006-03-11 20:07:57)Cytat(hwao ... 11.03.2006, 21:11:28
hawk Cytat(Martio @ 2006-03-11 14:04:49)[PHP] pobi... 11.03.2006, 22:46:08
eMartio Postanowiłem odejść od wzorca MVC, realizując apli... 12.03.2006, 10:42:33
Ociu Ja podzieliłem sobie kontroler na FrontController ... 12.03.2006, 11:35:35
eMartio Analizując wszystkie wątki o MVC na tym forum zgłu... 13.03.2006, 14:17:03
Vengeance "Czy możecie zrobić malutkie podsumowanie... 13.03.2006, 15:38:35
hawk Cytat(Vengeance @ 2006-03-13 15:38:35)MVC mów... 13.03.2006, 16:27:47
aleksander @eMartio: http://php.pl/wortal/artykuly/php/archit... 13.03.2006, 16:44:31
eMartio Cytat(aleksander @ 2006-03-13 15:44:31)@eMart... 13.03.2006, 21:15:27 ![]() ![]() |
|
Aktualny czas: 13.01.2026 - 15:25 |