Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rozkład metod w kontrolerze
Forum PHP.pl > Forum > Przedszkole
pabito
Witam

Zastanawiam się jak rozmieszczać poprawnie metody w kontrolerze. Mam swój sposób, który stosuje od dawna lecz nie jestem do niego przekonany.
Załóżmy, że chcę dodać nowego użytkownika, wykorzystując kontoler User.
Dalsze wyjaśnienia w komentarzu
  1.  
  2. class User extends Controller{
  3.  
  4. add(){
  5. //tutaj jest metoda add, ładuje ona odpowiedni widok z formularzem
  6. //zajmuje się ona tylko załadowaniem widoku
  7.  
  8. //w formularzu action='addUser', czyli formularz wysyłany jest do poniższej metody
  9. }
  10.  
  11. addUser(){
  12. //tutaj zostaja wyslane dane z formluarza
  13. //nastepuje tutaj walidacja i jezeli jest okej jest tworzony obiekt modelu User ii wywolana metoda add()l
  14. $dane='xx'; //jakies dane z formularza
  15. $Model_User->add($dane);
  16. //powyżej zostaje dodany user do bazy
  17. }
  18. }


czy taka konwencja jest poprawna?
że jest osobna metoda na załadowanie widoku?
Bo teraz chcąc dodać usera muszę stworzyć dwie metody pierwsza-ładuje widok, druga-wysyła dane do modelu
b4rt3kk
Jak chcesz zgodnie z MVC to nie kontroler powinien zajmować się walidacją danych z formularza.

Kontroler -> wywołuje widok formularza -> przesłanie POST -> model interpretuje dane i zapisuje do bazy -> kontroler wywołuje odpowiedni widok
kopecsrk
ja bym zrobił tak:

  1. class User extends Controller{
  2.  
  3. public function actionCreate() { // akcja tworząca użytkownika
  4.  
  5. $model = new User; // model user
  6.  
  7. if (isset($_POST['formualarz'])) { // jeżeli pobierze wartości to wykona dalszy skrypt
  8. $model->attributes = $_POST['Formularz']; // zapisuje wartości z postu
  9.  
  10. if($model->validate()){ // walidujesz model
  11. $model->save(); // jeżeli zwaliduje to zapisuje
  12. $this->redirect (); // i wyświetla widok
  13. }
  14.  
  15. }
pabito
hmmm, a ja zawsze walidowałem w kontolerze.
b4rt3kk
Cytat(pabito @ 13.06.2013, 14:21:42 ) *
hmmm, a ja zawsze walidowałem w kontolerze.


Generalnie kontroler ma pośredniczyć między widokiem, a modelem, a także zarządzać całością. Ale sam w sobie nie powinien ingerować w żaden sposób w zawartość przekazywanych zmiennych. Od tego jest model. Kontroler ma go tylko uruchomić oraz wywołać odpowiednie metody.
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.