Witam
Zastanawiam się jak powinienem podzielić kontrolery w mojej aplikacji opartej na Codeigniterze. W bazie mam 3 modele (cars, users, orders), a kontrolerów miałem więcej, praktycznie każdy kontroler odpowiadał za inną stronę (add_car, show_car itp). Teraz to zmieniłem i to co było wcześniej oddzielnymi klasami kontrolerów, teraz jest metodami w 3 klasach kontrollerów (np kontroller car z metodami add_car, show_cad itd). Ale znów zastanawiam się czy to podejście jest słuszne? Czy jak to inaczej zaplanować?
Każdy kontroler powinien odpowiadać za daną grupę requestów. Np kontroler Users powienien obsługiwać takie rzeczy jak dodawanie usera, usuwanie usera, aktualizacje, podgląd profilu, pobranie listy.
Tak jest dobrze, controller car
powinien obsłużyć cruda od samochodów + jakieś inne operacje związane z samochodami. Poza tym czym lepiej logicznie pogrupujesz dane akcje, tym łatwiej będzie Ci obsługiwać swój projekt nawet pod kątem url'i linków
/users/add
/cars/delete
itd itd. Oczywiście to tylko jeden z przykładów, korzyści jest o wiele więcej.
Ok, dzięki wielkie za pomoc.
A jeszcze jedna kwestia, w codeigniterze z tego co wiem raczej nie powinno wywoływać się innych kontrolerów w danym kontrolerze, a w sytuacji gdy użytkownik składa zamówienie muszę zmienić rzeczy w tabeli car i order. Czy lepiej będzie w tej sytuacji w metodzie klasy cars wywołać metodę z modelu order czy może przez session data przekazać dane do kontrolera order i go zrobić na niego przekierowanie?
Kontroler w żadnym wypadku nie ma prawa wywołać innego kontrolera. Skomplikowane operacje na kilku tabelach dobrze jest tworzyć w osobnych klasach często zwanych serwisami (services) i ten serwis przez DI otrzymuje modele i na nich robi operacje. Nie wiem jak jest teraz codeigniterze bo to już przestarzały framework i dziś się z niego nie korzysta.