Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Rozkład metod w kontrolerze
pabito
post 13.06.2013, 12:19:59
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 4
Dołączył: 14.05.2013

Ostrzeżenie: (0%)
-----


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

Ten post edytował pabito 13.06.2013, 12:21:04
Go to the top of the page
+Quote Post
b4rt3kk
post 13.06.2013, 12:34:20
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kopecsrk
post 13.06.2013, 13:14:43
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 30.04.2013

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
pabito
post 13.06.2013, 13:21:42
Post #4





Grupa: Zarejestrowani
Postów: 77
Pomógł: 4
Dołączył: 14.05.2013

Ostrzeżenie: (0%)
-----


hmmm, a ja zawsze walidowałem w kontolerze.
Go to the top of the page
+Quote Post
b4rt3kk
post 13.06.2013, 13:32:33
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 10:27