Rozszerzanie klasy CI_Model

Jeśli piszesz większy projekt, to po pewnym czasie może się okazać, że każdy z Twoich modeli wygląda podobnie – przynajmniej w pewnej części. Aplikacje internetowe, to w dużej mierze często operacje typu CRUD, których kod jest łatwy do przewidzenia. Dlatego warto w takich momentach zastosować się do metody DRY i spróbować refaktoryzować swój model. W tym celu możemy stworzyć klasę MY_Model w katalogu application/core z „uniwersalnym” kodem.

Oczywiście poniższy przykład będzie przedstawiał chyba jeden z najprostszych możliwych sposobów. Do solidnych i gotowych rozwiązań w tej kwestii przejdziemy na końcu tego wpisu. Ten kod potraktuj proszę tylko jako wprowadzenie w temat.

Zobaczmy teraz jak można wykorzystać powyższą klasę w praktyce. Na początek tworzymy standardowy plik modelu, który jednak będzie rozszerzał klasę MY_Model, a nie jak zazwyczaj klasę CI_Model:

Tak jest, to tyle jeśli chodzi o model. Teraz pora na kontroler (z góry przepraszam za niektóre długie nazwy metod, ale miało być „obrazowo”):

Mam nadzieję, że powyższy przykład wykorzystania klasy MY_Model mówi sam za siebie.

Oczywiście istnieją gotowe, bardziej rozbudowane rozszerzenia klasy modelu. Zaproponuję Wam tutaj dwa z nich. Autorem pierwszego jest Jamie Rumbelow (https://github.com/jamierumbelow/codeigniter-base-model), a drugiego Jesse Terry (https://github.com/jesseterry/CodeIgniter-CRUD-Model). Oba projekty dysponują dokumentacją, która z pewnością ułatwi Wam rozpoczęcie pracy.

Co więc daje nam wykorzystanie rozszerzonej klasy modelu? Przede wszystkim możemy dzięki temu pracować szybciej i uprościć nasz kod.

Jaką mamy alternatywę dla używania własnej/gotowej klasy modelu? Odpowiedzią może się okazać ORM, ale to już temat na zupełnie inny wpis.

5 thoughts on “Rozszerzanie klasy CI_Model

    • Kwestia gustu – oba modele różnią się trochę jeśli chodzi o możliwości. Ja akurat preferuję rozwiązanie Jamie’go – ma po prostu opcje których szukam.

  1. Cześć moim skromnym zdaniem najlepsza forma dostępu do bazy danych i wykonywania na niej operacji to użycie biblioteki między innymi

    http://www.phpactiverecord.org/

    Zobaczcie sobie proste przykłady a się przekonacie …

    Piękno sprawy to gotowy zestaw wywołan (w tym dynamicznych np find_by_nazwapola() )
    Albo po prostu users::find(). // zakładając ze mamy klasę users (oraz tablice w bazie)

    Ps/ biblioteka wzorowana na ryby on rails , i super działa z codeigniter.

    pozdrawiam

    • Dzięki za komentarz. Oczywiście jest to jedna z możliwości, chociaż to już rozwiązanie typu ORM.

  2. Pingback: CRUD dla CodeIgniter czyli rozserzamy modele | CodeIgniter Polska

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.