Generalnie mam jeden kontroler dla każdej logicznej grupy funkcji. Często będzie to odpowiadać jednemu sterownikowi na model, czasami nie.
Wyobraź sobie, że tworzysz prosty katalog online, który wyświetla listę kategorii, a następnie, gdy użytkownik wybierze kategorię, wyświetli listę produktów z tej kategorii, wraz z panelem administracyjnym dla CRUD
operacji na kategoriach i produktach. Miałem dwa modele (CategoryModel
i ProductModel
). Miałem kontroler, który generował listy kategorii dla interfejsu i innego kontrolera, który generował listy produktów (np. CategoryController
i ProductController
). Miałem wtedy kontroler kategorii i produktów na zapleczu (AdminCategoryController
i AdminProductController
). Dwa kontrolery zaplecza obsługiwałyby operacje list/add/edit/delete/view dla odpowiednich modeli. Jeśli uważasz, że struktura adresu URL i umieścisz powiązane funkcje na powiązanych adresach URL, struktura kontrolera będzie często pasować do struktury adresu URL. W rzeczywistości niektóre frameworki (np. CodeIgniter) żądania trasy oparte na nazwie kontrolera jako zachowanie domyślne.
Jeśli chodzi o to, co dzieje się w kontrolerach, pracuję nad ideą, że modele służą do dostępu do danych i zawijania i ukrywania struktury bazy danych. Logika taka jak "przypisz aktualny czas do zakończenia_pełnienia, gdy status jest ustawiony na" ukończ "" to modele doskonale dopasowane.
Wyświetlenia zawierają całą prezentację. Kontrolery/modele nie powinny generować ani obsługiwać HTML. Decyzje takie jak 2 kolumny lub 3 należą do widoków. Logika w widokach powinna być ograniczona do tej, która jest wymagana do wygenerowania widocznego wyniku. Jeśli chcesz przesłać zapytanie do bazy danych z widoku, prawdopodobnie umieszczasz za dużo logiki w widoku.
Sterowniki są za to, co zostało. Ogólnie oznacza to sprawdzanie danych wejściowych, przypisywanie danych formularzy do modeli, wybór właściwych widoków i tworzenie modeli wymaganych do obsługi żądania.
Dzięki .... to właśnie robię. Jedną rzeczą, którą próbuję zrobić, jest umieszczenie większej logiki w warstwie modelu. Używam obiektów modelu Propel i myślałem, że walidacja powinna przejść do warstwy modelu. Kontroler po prostu ustawia dane w modelu ... – AndreLiem
Niektórzy programiści wolą umieścić wszystkie weryfikacje w modelach. Uważam, że sprawdzanie poprawności formularza jest lepiej wykonywane w kontrolerze (ponieważ jest ściśle powiązane z interfejsem użytkownika), a podstawowa weryfikacja typu danych (np. Ograniczanie pola wyliczeniowego do określonych wartości) działa dobrze w modelu. –