Hej, Mirki. Uczę się laravela i nurtuje mnie pewna sprawa, a nie wiem gdzie szukać odpowiedzi, bo nie wiem nawet jak to nazwać. Mam kilka kontrolerów a nich bardzo podobny do siebie kod. Jedyne czym się różni to modelem do którego się odwołuje oraz nazwą zmiennej.
$zmienna = Model::findOrFail($id) jakieś operacje na tej zmiennej Na końcu wrzucam ta zmienną do widoku. Kawałek kodu ciągle się powtarza w kilku kontrolerach, nie wiem czy będzie ich więcej. Ale jeśli to wolałbym to zrobić jakoś szybciej niż kopiować fragment kodu i zmieniać w nim model oraz nazwę zmiennej.
Myślałem, żeby stworzyć kolejny kontroler a w nim metodę, która by to obsługiwała. I mam kilka pytań w sprawie tego. 1. Czy to jest dobre rozwiązanie? 2. Jeśli tak, to jak przemycić nazwę modelu do tego kontrolera? np. $zmienna = KontrollerObslugujacy::moja_akcja($id, Model) ? 3. Jeśli to jest złe rozwiązanie to jak to rozwiązać? Może jest jakiś sposób na rozwiązanie tego, ale nie wiem po jakiej nazwie tego szukać.
@gustav: Ja takie sprawy mam w dziedziczeniu ale nie jest to najlepsza metoda. Z czasem taki bazowy kontroler obrasta za bardzo, do tego pojawiają się wyjątki w obsłudze niektórych kontrolerów co utrudnia sprawę. Wydaje mi sie że tak jak pisał @slave89 osobna klasa lepsza.
@gustav: Sorry, że tak późno. Zapewne już wdrożyłeś jakieś rozwiązanie ale może przyda Ci się to w przyszłości. Zastosowanie zwykłego Repository Pattern (do modelu) korzystając z tzw. contracts Laravela.
@gustav: Spoko. Najlepiej o takich rzeczach myśleć na etapie projektowania całej aplikacji - potem jak Ci się rozrośnie to może być zgrzyt i niepotrzebnie stracisz czas na refaktoryzacji kodu. Wszystko rozbija się o stworzenie abstrakcyjnej warstwy między controllerem a modelem (bazą). Dane repo odpowiada za wykonywanie operacji na twoim modelu (który jest używany w jakimś controllerze). Jesli jednak potrzeba Ci większej swobody (a kiedyś ona Ci się z pewnością przyda bo
Mam kilka kontrolerów a nich bardzo podobny do siebie kod. Jedyne czym się różni to modelem do którego się odwołuje oraz nazwą zmiennej.
$zmienna = Model::findOrFail($id)jakieś operacje na tej zmiennej
Na końcu wrzucam ta zmienną do widoku. Kawałek kodu ciągle się powtarza w kilku kontrolerach, nie wiem czy będzie ich więcej. Ale jeśli to wolałbym to zrobić jakoś szybciej niż kopiować fragment kodu i zmieniać w nim model oraz nazwę zmiennej.
Myślałem, żeby stworzyć kolejny kontroler a w nim metodę, która by to obsługiwała. I mam kilka pytań w sprawie tego.
1. Czy to jest dobre rozwiązanie?
2. Jeśli tak, to jak przemycić nazwę modelu do tego kontrolera? np. $zmienna = KontrollerObslugujacy::moja_akcja($id, Model) ?
3. Jeśli to jest złe rozwiązanie to jak to rozwiązać? Może jest jakiś sposób na rozwiązanie tego, ale nie wiem po jakiej nazwie tego szukać.
#php #laravel #naukaprogramowania
Lepiej zrób sobie osobną usługę gdzie w parametrze możesz przekazać callback do pobrania danych z odpowiedniego modelu.
Wydaje mi sie że tak jak pisał @slave89 osobna klasa lepsza.
Dzięki wielkie za podpowiedzi. Pokombinuję co nieco i zobaczymy co wyjdzie :)
https://laravel.com/docs/5.5/contracts