Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odbiór formularza z wykorzystaniem MVC?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Pytajnik0
Witajcie,

od pewnego czasu w wolnych chwilach piszą dość rozbudowany serwis dla własnych potrzeb, staram się pisać kod obiektowo z wykorzystaniem MVC.

Przechodząc do problemu, otóż układ folderów aktualnie wygląda tak -

  • class
  • themes
  • images

W głównym folderze trzymam kontrolery, tutaj rodzi się problem, ponieważ w przypadku wczytania formularza ( warstwa widoku) z folderu themes, nie za bardzo wiem czy dobrym rozwiązaniem jest odbieranie tych danych i zapisywanie ich do bazy również w tym pliku, czy to już powinno się znaleźć w jakieś klasie? Rozumiem, że warstwa widoku nie powinna mieć wglądu w model, dlatego może lepszym rozwiązaniem będzie wrzucenie tego kodu do klasy i w przypadku wysłania formularza odbierania tych danych w kontrolerze?

Czekam na wasze sugestie, pozdrawiam.
Sephirus
ok a gdzie masz modele?

Jak powinno wyglądać wyświetlenie i wysłanie formularza wg MVC:

Wyświetlenie:

USER -> KONTROLER -> WIDOK_FORMULARZA -> WYŚWIETLAMY

Wysłanie:

USER -> KONTROLER -> MODEL -> KONTROLER -> PRZEKIEROWANIE

Zatem jak widać w przypadku wyświetlania kontroler ma załadować widok formularza i go wyświetlić. Jeśli chodzi o wysyłanie to wygląda to tak, formularz idzie postem do kontrolera, kontroler sprawdza (waliduje) dane, jeśli są ok przekazuje do modelu, który wrzuca je do bazy (na przykład) a następnie robisz przekierowanie na jakąś stronę lub odpalasz widok (może być ten sam) z informacją że dodano wink.gif
Pytajnik0
Z tym, że kod odpowiedzialny za dodawanie np. nowego użytkownika trzymać w klasie i wywoływać odpowiednią metodę w kontrolerze po ewentualnej walidacji?
Sephirus
Tak - ta klasa o której wspominasz to właśnie jest model...

kontroler powinien mieć metodę "dodajUzytkownika"

w tej metodzie powinno być sprawdzane czy został wysłany formularz czy ktoś po prostu odpalił tą metodę z przeglądarki.

Jeśli odpalone zostało z przeglądarki to wyświetlasz formularz tylko w tej metodzie.

Jeśli został wysłany formularz to kontroler w tej metodzie powinien zwalidować dane, powołać do życia model (czyli klasę odpowiedzialną za zarządanie danymi - czyli wrzucanie i wyciąganie ich z bazy) wywołać odpowiednią metodę modelu, przekazując jej dane usera. Metoda modelu powinna po porstu zrobić inserta do bazy. Po zakończeniu tej metody modelu kontroler może przekierować na jakąś stronę lub wyświetlić coś (załadować jakiś plik z szablonem)

Czyli musisz mieć podział conajmniej na:

Kontroler - ma się zajmować odbieraniem requestów od usera, ma posiadać metodę na każdy request (z czego może ta metoda być odróżniana na zasadzie czy wysłano POST). Metody kontrolera nie powinny nic robić w bazie danych, powinny sprawdzać czy dane wymieniane w requestach są ok, przekierowywać i wywoływac widoki (najprościej mówiąc - ładować opdowiednie pliki z szablonami). Kontroler musi mieć dostęp do modeli.

Model - ma za zadanie pobeirać, edytować i usuwać dane z bazy danych, jego metody powinny wykonywać jakieś konkretne akcje np. "rejestrujUżytkownika" itp. Model powinien być ładowany w kontrolerze i widok nie powinien z niego korzystać. Kontroler pobiera dane z modelu i przekazuje do widoku lub kontroler pobiera dane z requestu i przekazuje do modelu.

Widoki - w uproszczeniu skrypty z szablonami, html ze wstawkami PHP, który ładujesz odpowiednio w kontrolerze dla danych pobranych na przykład z modelu.
Crozin
1. Kontroler nie może sprawdzać poprawności danych, bo do tego potrzebna jest wiedza o samych danych - to jest zadanie dla modelu.
2. Widok musi korzystać z modelu, a kontroler nie powinien się specjalnie bawić w przekazywanie danych z modelu do widoku.
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.