Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MVC po raz n-ty
Forum PHP.pl > Forum > PHP > Object-oriented programming
bor1904
Witam
Jestem w trakcie realizacji mojej pierwszej aplikacji w PHP opartej o MVC.

Można powiedzieć, że opieram się o szkielet szkieletu TinyMVC - ale zmodyfikowałem go nieco .... i zaczynam mieć wyrzuty sumienia sad.gif


Problem jest chyba w tym, że to jest na tyle prosta aplikacja (panel zarządzający firewallem na Linuxie), że staram się na siłe coś urozmaicać a tu wszystko to 3 klasy na krzyż i w każdej po 1-2 metody :/

Czy może być tak, że zrobiłem sobie 3 klasy modelu:
-taka która zna polecenia ssh ( łączy mnie, autoryzuje, obsługuje błędy i oferuje kilka metod typu: wyświetl coś z systemu, czy zrób coś w systemie - ale nie ma żadnych konkretnych metod typu "weź plik A, przenieś go do folderu B i usuń folder C)
-taka która obsługuje sqlite ( łączenie z bazą , błędy, kilka podstawowych metod, rozłączanie w destruktorze)
-taka która obsługuje pliki (sprawdzenie praw, zapis, odczyt, obsługa błędów)

Po jednej klasie kontrolera akcji na każdą zakładkę np: statystyki ruchu, reguły firewalla, użytkownicy itd)

Widokiem natomiast zajmuje się u mnie smarty.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Mam wrażenie, że za dużo robią kontrolery, a za mało model ....
(wiem, że teoria mówi, aby np jedna klasa modelu obsługiwała jedną tabelę lub zespół tabel w BD... ale ja będę miał pewnie z 3 tab w bazie i to cala aplikacja)

Czy mogę zrobić tak, że wchodzę na jakąś zakładkę i wołam AC tej zakładki z domyślną metodą "index", która zawsze w mojej aplikacji pobiera jakieś dane z systemu bądz bazy i każe wyświetlić w smarty.
To co zostało wyświetlone to np lista userów, która od razu posiada modyfikowalne pola i linki oraz przyciski formularza.
Klikam np na link href=/users/delete i wołam ten sam AC-users i jego metode "delete" --- teraz czy mogę w metodzie delete zmodyfikować bazę i odwołać się $this-> do domyślnej metody "index", która pobierze dane z BD i wyświetli je już w zmodyfikowanej postaci czy poprostu metoda delete powinna przygotowywać widok do wyświetlenia ?


Będe bardzo wdzięczny za pomoc
Pozdrawiam
blooregard
Nie przejmuj się rozmiarem aplikacji. Jak nauczysz się pracować z wzorcem MVC na małych projektach, to z dużymi będzie Ci już łatwo.

Co do zadań wykonywanych przez kontroler i model - niedawno był wątek na forum, musisz poszukać, gdzie były dyskutowane różne warianty implementacji.

//edit
to ten topic:
Temat: MVC Kontroler gdzie
morgan
Cytat(bor1904 @ 31.03.2010, 01:43:40 ) *
Czy mogę zrobić tak, że wchodzę na jakąś zakładkę i wołam AC tej zakładki z domyślną metodą "index", która zawsze w mojej aplikacji pobiera jakieś dane z systemu bądz bazy i każe wyświetlić w smarty.
To co zostało wyświetlone to np lista userów, która od razu posiada modyfikowalne pola i linki oraz przyciski formularza.
Klikam np na link href=/users/delete i wołam ten sam AC-users i jego metode "delete" --- teraz czy mogę w metodzie delete zmodyfikować bazę i odwołać się $this-> do domyślnej metody "index", która pobierze dane z BD i wyświetli je już w zmodyfikowanej postaci czy poprostu metoda delete powinna przygotowywać widok do wyświetlenia ?


Hej, moim zdaniem po akcji delete powinienes po prostu zrobic redirect :], tak jest najprosciej, czyli np: tak jak napisales, klikasz w link href=/users/delete, controller obsluguje żądanie (kasuje, przenosi, whatever) ale ze w akcji delete zazwyczaj nie ma czego wyswietlac to najlepiej jest zrobic redirect na liste userów na końcu :]

Pozdro
bor1904
Dziękuję za zainteresowanie.

Z tym redirectem otrzymam dokładnie ten sam efekt co z

$this->index();

Czy zastosowanie redirecta czy index będzie bardziej "eleganckie"?

Pozdrawiam
morgan
prawie taki sam efekt,
adres url bedzie taki na ktory zrobisz redirect, to co ty napisales to jest forward.
mysle ze w tym wypadku elegantszym rozwiazaniem jest redirect
bo w przypadku $this->index() url dalej bedziesz mial users/delete a widok juz liste.
bor1904
dzięki, rozumiem, że powinienem skorzystać z czegoś na wzór:

  1. $host = $_SERVER['HTTP_HOST'];
  2. header("Location: http://$host/users");


pozdrawiam
morgan
dokładnie tak jak napisaleś

ale jak chcesz to mozesz olac zmienna $host i uzyc tylko
  1. header('Location: /users');
  2. die();

url względny starczy
thek
Z tym host morgan bym zostawił. Niestety składnia uproszczona jest według standardów błędna i zdarzyło się w mojej pracy, że inna konfiguracja sprawiała, iż taki header nie działał.
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.