Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter]Codeigniter wyjaśnienie model
Forum PHP.pl > Forum > PHP > Frameworki
mateuszstr1994
Witam, zacząłem swoją przygodę z Frameworkiem Codeigniter, jestem początkujący. Przejdę do sedna, jeśli mam kontroler i potrzebuje pobrać dane z Bazy Danych korzystam z modelu. Niby proste ale problem leży w tym że w książce którą się wspieram model nosi nazwę kontrolera i wszystkie funkcje są deklarowane tam np. pobierz kategorie() a w kolejnym kontrolerze znów jest to samo, czyli ta sama funkcja zapisana w innym modelu. Czy nie lepiej jest stworzyć ogólny model na przykład Database_Query gdzie będą tylko zapytania i zwracane wyniki ?
markuz
Nie, potem jak będziesz szukał metody która odpowiada za pobieranie kategorii to od razu będziesz wiedział do którego pliku zajrzeć.

Ew. pokaż kod.
mateuszstr1994
Pozwolisz że zadam kolejne pytanie, otóż w Kontrolerze posiadam następujące metody: index - tu wywołuje za pomocą this pozostałe metody kontrolera(create_head,create_header, create_footer), create_head() - wywołuje widok odpowiedzialny za część strony head, create_header() - wywołuje kolejny widok zawierający kolejną cześć strony ... Czy taki podział ma sens ?
markuz
Pokaż kod.
mateuszstr1994
  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3.  
  4. class Homepage extends CI_Controller
  5. {
  6. public function index()
  7. {
  8. $this -> create_head();
  9. $this -> create_header();
  10. $this -> load -> view('footer');
  11. }
  12.  
  13. private function create_head()
  14. {
  15. $DataHead = array
  16. (
  17. 'title_page' => 'Moja Pierwsza Strona w CodeIgniterze',
  18. );
  19.  
  20. $this->load->view('head',$DataHead);
  21. }
  22.  
  23. private function create_header()
  24. {
  25. $this->load->model('homepage_model');
  26.  
  27. $ElementsHeader['InformationHeader'] = $this->load->view('header_elements/information-bar', NULL, TRUE);
  28. $ElementsHeader['MenuLogowanie'] = $this->load->view('header_elements/menu-logowanie.php', NULL, TRUE);
  29. $ElementsHeader['Search'] = $this->load->view('header_elements/search-form.php', NULL, TRUE);
  30. $ElementsHeader['BasketHeader'] = $this->load->view('header_elements/basket-header.php', NULL, TRUE);
  31.  
  32. $DataMenu = array
  33. (
  34. 'default_menu' => array ('Wszystkie Kategorie','Top100','Nowości','Dla Niej','Dla Niego','Promocje')
  35. );
  36.  
  37. $ElementsHeader['MenuHeader'] = $this->load->view('header_elements/menu-header.php', $DataMenu, TRUE);
  38. $this->load->view('header',$ElementsHeader);
  39. }
  40.  
  41. }
nospor
Cos przekombinowales. Kontroler nie powinien nic wiedziec o widokach a u ciebie az sie roi od ladowania roznych czesci widoku w kontrolerze. Kontroler co najwyzej powinien zaladowac widok danej akcji i to wszystko. Cala reszta po stronei widoku i jego szablonu
markuz
Ok, widzę, że dopiero zaczynasz z PHP. Taki podział nie ma sensu ponieważ będziesz miał bardzo dużo powtórzeń - dla każdego kontrolera będziesz musiał tworzyć te metody. Dowiedz się czym jest dziedziczenie i wydziel je do nadrzędnej klasy np. MyController.
nospor
Cytat
Dowiedz się czym jest dziedziczenie
Chyba raczej co to jest MVC i oddzielnie widoku od reszty. No nie powiedz mi ze CI tego nie wspiera?
markuz
@nospor Jak pisałem w nim x lat temu to nie wspierał, teraz też widzę, że słabo ma z tymi widokami z docs. Możesz wczytać widok w widoku ale do tego nadrzędnego będzie trzeba przekazać wszystkie zmienne użyte w tym podrzędnym widoku.
Ja to rozwiązywałem własną metodą loadView w nadrzędnym kontrolerze która wczytyała nagłowek, stopkę itp. a w środku widok który chciałem.
nospor
Niby jakis szablon mozna miec
https://code.tutsplus.com/tutorials/an-intr...iter--net-25648
a to tylko jedno z rozwiazan.
markuz
Gdybym się uparł to mógłbym podpiąć jakieś symfonowe widoki razem z twigiem - ale autor działa na czystym CI i ma małą wiedzę jeszcze o PHP dlatego zaproponowałem dziedziczenie i wydzielenie tych metody do nadrzędnej klasy.
mateuszstr1994
Reasumując tworze kontroler o klasie np. Page, następnie ta klasa dziedziczy po CI_Controller a Kontroler odpowiedzialny za stronę główną, dziedziczy po klasie Page odpowiednie metody, dobrze rozumiem ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.