mateuszstr1994
26.02.2018, 16:57:04
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
26.02.2018, 16:58:44
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
26.02.2018, 17:28:09
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
26.02.2018, 17:35:11
Pokaż kod.
mateuszstr1994
26.02.2018, 17:37:01
<?php
defined('BASEPATH') OR
exit('No direct script access allowed');
class Homepage extends CI_Controller
{
public function index()
{
$this -> create_head();
$this -> create_header();
$this -> load -> view('footer');
}
private function create_head()
{
(
'title_page' => 'Moja Pierwsza Strona w CodeIgniterze',
);
$this->load->view('head',$DataHead);
}
private function create_header()
{
$this->load->model('homepage_model');
$ElementsHeader['InformationHeader'] = $this->load->view('header_elements/information-bar', NULL, TRUE);
$ElementsHeader['MenuLogowanie'] = $this->load->view('header_elements/menu-logowanie.php', NULL, TRUE);
$ElementsHeader['Search'] = $this->load->view('header_elements/search-form.php', NULL, TRUE);
$ElementsHeader['BasketHeader'] = $this->load->view('header_elements/basket-header.php', NULL, TRUE);
(
'default_menu' => array ('Wszystkie Kategorie','Top100','Nowości','Dla Niej','Dla Niego','Promocje') );
$ElementsHeader['MenuHeader'] = $this->load->view('header_elements/menu-header.php', $DataMenu, TRUE);
$this->load->view('header',$ElementsHeader);
}
}
nospor
26.02.2018, 17:39:02
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
26.02.2018, 17:39:55
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
26.02.2018, 17:41:05
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
26.02.2018, 17:46:44
@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
26.02.2018, 17:56:59
markuz
26.02.2018, 19:26:39
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
26.02.2018, 22:14:54
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.