Szymciosek
26.06.2012, 12:40:54
Czy któraś z klas: Model, View czy Controller powinna po sobie dziedziczyć ?
Pytam, bo widziałem przykłady bez dziedziczenia i z dziedziczeniem i wolę zapytać

Drugim pytaniem, na które też znalazłem kilka odpowiedzi to przełączanie widoków.
Uruchamiam index.php czyli ten podstawowy plik, a w nim uruchomienie kontrolera, który natomiast uruchamia model i widok...
Fajnie, ale co dalej ? Na razie mam zrobione www.xx.pl/index.php?view=contact i ta zmienna view jest sprawdzana w switch/case i tam mam include odpowiedni widok i uruchomienie klasy danego widoku
case 'contact' :
include_once('views/contact_view.php');
$this->view = new Contact_View;
break;
W view mam stworzone jakieś menu np
private function createMenu()
{
echo '<a href="?view=index">Index</a><br /> <a href="?view=contact">Contact</a><br /><hr />';
}
Ale czy nie ma lepszego sposobu na to np przez pominięcie get czy coś ? Wiem, że jeszcze można ustawić routery na www.xx.pl/controller/action/param i wtedy tworzę kontrolery (ilość zależna od podstron), które uruchamiają różne widoki, ale to w formie takiego uproszczenia.
nospor
26.06.2012, 12:43:25
Cytat
Pytam, bo widziałem przykłady [....] z dziedziczeniem
Tak? A to ciekawe - mógłbyś napisać która po której dziedziczyła bo jestem bardzo ciekaw jak można wpaść na taki pomysł
Szymciosek
26.06.2012, 12:45:32
http://www.phppatterns.com/docs/design/arc...troller_patterntutaj np masz
class ProductController extends ProductView {
http://r.je/mvc-in-php.html tutaj już nie ma dziedziczenia jako takiego.
nospor
26.06.2012, 12:52:30
1) Po kodzie widać że jest to bardzooooo stary kod
2) M V C powinny być oddzielnymi rzeczami w żaden sposób nie dziedziczącymi po sobie. Widok to widok, a kontroler to kontroler. Równie dobrze można dziedziczyć obiekt samochód po obiekcie facet
Szymciosek
26.06.2012, 12:53:37
A co z przełączaniem widoków ? Jakie są sposoby na to ?
krzywy36
26.06.2012, 13:18:52
zdefiniuj "przełączanie widoków". Parsujesz url i na podstawie otrzymanych danych wybierasz kontroler i jeśli trzeba to widok i model.
Szymciosek
26.06.2012, 13:28:22
Czyli całe parsowanie url musi się odbywać w index.php, a później wybieram kontroler ?
Na razie mam tak:
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p>MVC PHP Test</p>
<?php
include_once("controllers/controller.php");
$request = $_GET['view'];
$Controller = new Controller($request);
?>
</body>
</html>
controller.php
<?php
class Controller
{
public $request;
public $view;
public function __construct($request)
{
$this->request = $request;
$this->displayView();
}
private function displayView()
{
switch($this->request)
{
case 'index' :
include_once('views/index_view.php');
$this->view = new Index_View;
break;
case 'contact' :
include_once('views/contact_view.php');
$this->view = new Contact_View;
break;
default :
include_once('views/index_view.php');
$this->view = new Index_View;
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
index_view.php
<?php
class Index_View
{
public function __construct()
{
$this->createMenu();
$this->display();
}
private function createMenu()
{
echo '<a href="?view=index">Index</a><br /> <a href="?view=contact">Contact</a><br /><hr />';
}
private function display()
{
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
contact_view.php
<?php
class Contact_View
{
public function __construct()
{
$this->createMenu();
$this->display();
}
private function createMenu()
{
echo '<a href="?view=index">Index</a><br /> <a href="?view=contact">Contact</a><br /><hr />';
}
private function display()
{
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
Niby działa i chyba ok, modelu jeszcze nie robiłem, bo dopiero zaczynam z mvc coś więcej.
Chodzi mi o to czy jest inna metoda na to niż:
$request = $_GET['view'];
Pisałem wcześniej o routerach, które mogę ustawić na kontrolery, ale nie umiem tego jeszcze.
krzywy36
26.06.2012, 13:35:13
Wydaje mi się, że źle pojmujesz MVC. MVC to sama idea dzielenia kodu na warstwy, to o co Ty pytasz to już działanie małego frameworka. Poza tym, nie identyfikuj (pojedynczych) klas z konkretnymi warstwami, bo często jest to dużo bardziej skomplikowane. Przeszukaj forum pod kątem hasła "framework" a gwarantuje, że znajdziesz odpowiedzi na swoje pytania bo już dużo takich tematów było
Szymciosek
26.06.2012, 13:43:44
Czyli co ? MVC nie nadaje się do takich rzeczy jak przełączanie podstron i później dodanie jakiegoś działania czy coś ?
Nie zrozumiałem tego: ". Poza tym, nie identyfikuj (pojedynczych) klas z konkretnymi warstwami, bo często jest to dużo bardziej skomplikowane."
Framework frameworkiem, samo mvc też po coś zostało stworzone. Czyli na razie są tylko 2 metody "przełączania" ? $_GET i routery ?
Cytat
Czyli całe parsowanie url musi się odbywać w index.php, a później wybieram kontroler ?
FW budujesz? To przydałaby się klasa do parsowania
URI, oraz
Router który uruchomi odpowiedni kontroler.
MVC wygląda mniej więcej tak, że ładujesz zawsze jako pierwszy kontroler, w nim możesz/lub nie odwołać się do modelu, dane z modelu możesz/lub nie wysłać do widoku, a czym będzie i co robił sam widok to już zależy od Ciebie.
Poszukaj na forum w dziale "PHP" było dużo o tym, jak i w pod forum o oop.
Szymciosek
26.06.2012, 13:58:00
Nie buduję FW

, ale chciałem po prostu za pomocą MVC stworzyć aplikację, która będzie miała kilka widoków i myślę nad tym jak to zrobić, pytałem już wyżej czy tylko $_GET i przekazanie zmiennej w linku to jeden z prostszych sposobów.
W ActionScript3.0 wyglądało to tak, że za pomocą switch/case wysyłałem instrukcje o zmienia widoku i stary widok był wyrzucany, a ładowany był nowy. Z tym, że w php problemem jest link.
Ciężko mi się dogadać coś w tym temacie :/
Tak, GET to najprostsze wyjście. Jednak to co prezentujesz, to mi za bardzo na MVC nie wygląda, bo gdzie masz tam model i w widoku tworzysz menu? No, można i tak, jak wolisz ;D A z tym switch, to do b.małych stron.
krzywy36
26.06.2012, 14:02:39
Cytat(Szymciosek @ 26.06.2012, 14:43:44 )

Czyli co ? MVC nie nadaje się do takich rzeczy jak przełączanie podstron i później dodanie jakiegoś działania czy coś ?
Nie zrozumiałem tego: ". Poza tym, nie identyfikuj (pojedynczych) klas z konkretnymi warstwami, bo często jest to dużo bardziej skomplikowane."
Framework frameworkiem, samo mvc też po coś zostało stworzone. Czyli na razie są tylko 2 metody "przełączania" ? $_GET i routery ?
MVC zakłada (upraszczając) oddzielenie warstwy logiki od warstwy prezentacji - tyle, nie myl MVC z frameworkiem. Co do "dwóch metod przełączania", zawsze możesz linkować do osobnych plików (żart, nie rób tego

). Hmm, $_GET i routery, nie rozumiem za bardzo, bo router (czy tam klasa parsująca URL, jakkolwiek ją nazwiemy) i tak działa na $_GET, a raczej na całym urlu i jest to najlepsza metoda, bo masz tylko jeden punkt wejścia do aplikacji. Zresztą chyba wszystkie FW tak działają.
Cytat
Hmm, $_GET i routery, nie rozumiem za bardzo, bo router (czy tam klasa parsująca URL, jakkolwiek ją nazwiemy) i tak działa na $_GET, a raczej na całym urlu i jest to najlepsza metoda
Router ładuje odpowiedni kontroler, na bazie odebranego URI. Całe sterowanie może być oparte na GET, o ile tak to zaimplementujesz. Chociaż nie uważam aby index.php?controller=art&method=xxx¶m=23 był taki rewelacyjny, ale to już inna kwestia.
Szymciosek
26.06.2012, 14:08:50
!*!, gdzie mam w takim razie tworzyć menu ? Piszesz, że nie mam modelu i menu tworzę w widoku, a za chwilę jak tam chcę, więc o co chodzi ?
krzywy36, $_GET, a chodziło mi z routerami o uproszczenie linku żeby uruchamiało mi od razu kontroler.
Mówiłem, że modelu na razie nie robiłem, bo nie korzystam na razie z danych jako tako.
Szukałem jakichś tutoriali, przykładów o mvc, ale mało coś tego jak DOKŁADNIE z tego korzystać.
Nie znajdziesz dokładnego opisu MVC, bo MVC jest tym jak sam sobie to zinterpretujesz. Menu tworzysz w widoku, ale dane do niego pobierasz z modelu (więc, ok nie doczytałem;)).
Szymciosek
26.06.2012, 14:42:10
To może chociaż jakieś przykłady z życia wzięte ? Wiem, że na prostą stronę MVC to raczej dużo, ale w przyszłości chciałbym coś dodać, może panel admina czy coś.
Szymciosek
26.06.2012, 15:03:38
To widziałem w sumie, ale czy to się jakoś nadaje do prostej strony z 5 podstronami ?
No i tutaj jest tylko odpalenie kontrolera, który dalej operuje resztą, a ja bardziej prosiłbym o coś właśnie na przykładzie 2-3 widoków
Cytat
To widziałem w sumie, ale czy to się jakoś nadaje do prostej strony z 5 podstronami ?
W takiej formie jaką masz teraz? Nie.
Cytat
No i tutaj jest tylko odpalenie kontrolera, który dalej operuje resztą, a ja bardziej prosiłbym o coś właśnie na przykładzie 2-3 widoków
Na tym polega MVC, kontroler steruje wszystkim i to od niego ma zależeć jaki widok ma być wczytany.
Czyli u Ciebie podstrony, mogą być jakimś parametrem w metodzie kontrolera, która uruchamia konkretny widok.
Szymciosek
26.06.2012, 15:12:59
Cytat(!*! @ 26.06.2012, 16:06:56 )

W takiej formie jaką masz teraz? Nie.
To w jakiej formie ? Mógłbyś to jakoś zaprezentować, nie proszę o gotowce tylko krótki opis, a ja później dam to do oceny.
Cytat(!*! @ 26.06.2012, 16:06:56 )

Czyli u Ciebie podstrony, mogą być jakimś parametrem w metodzie kontrolera, która uruchamia konkretny widok.
Czyli do kontrolera mogę przekazać poprzez np __construct zmienną jakiWidok i wtedy na podstawie tego kontroler dalej poleci ze wszystkim, ładując wszystko co trzeba, ale wtedy gdzie wybór widoku i przekazanie do kontrolera ? W index ? Gdzie dokładniej ?
Myślałem, że to wszystko będzie bardziej proste...
Widzisz, za bardzo kombinujesz i nie widzisz ideii MVC. PHP samo w sobie jako tako też jest drętwe... Zacznijmy od tego że bez jakiegoś FW dobrze tego nie zrobisz, przynajmniej tak mi się wydaje. Aby to miało ręce i nogi, wszystkie przekierowania powinny iść przez index.php
Kontrolerów w aplikacji może być kilka, nie musisz ograniczyć się do jednego (a w zasadzie nie powinieneś). Zakładając że chcesz wczytać jakieś strony, odpalasz kontroler Pages, z jego metodą getPage
class Pages
{
public function getPages($title);
{
// na podstawie $title uruchamiasz model, który pobiera jakieś dane, cokolwiek np. tablicę z menu
// zapisujesz tę tablicę w zmiennej
$menu = array(); //wiadomo że tu ma być coś w stylu $menu = getMenu(); aby model zwrócił return z tablicą
// przekazujesz te dane do widoku
$view = new View()
$view-> add($menu);
//i jak chcesz wyświetlasz
$view->render();
}
}
To mniej więcej tak powinno być.Aha, i w widoku pobierasz tą tablicę i tam ją wyświetlasz w pętli, zhtml czy co tam chcesz.
Dipter
26.06.2012, 15:25:40
Musisz wybrać inną logikę całej tej aplikacji, bo obecnie brniesz w złą stronę:
1. Jeśli ma być zaledwie 2-3 strony (które w dodatku mają być na sztywno ustawione) to imho nie opłaca się przerabiać tutaj wzorca MVC na wszelkie i odbiegające od niego formy, tylko wybranie czegokolwiek innego bardziej pasującego.
2. Jeśli zaś stwierdzisz, że później będziesz chciał coś powiększyć, dodać podstrony, to wtedy robisz sobie sam problem, ponieważ wszystko zacząłeś tworzyć na sztywno.
W cale nie powiedziane jest, że musisz korzystać z takich wzorców (z trzema warstwami), a nie innych skoro możesz zrobić aplikację
w oparciu o "dwie warstwy" - Jedną odpowiedzialną za logikę, a drugą za wszelkie możliwe dane i informacje. Istnieje wiele MVC - podobnych wzorców, które mogą o wiele bardziej przydać się do twojej sytuacji.
Szymciosek
26.06.2012, 15:29:09
Na FW myślę, że za wcześnie jeszcze... Brałem się kilka dni temu za Kohana, ale właśnie trochę poległem na MVC, a do tego ta dokumentacja jest do niczego i mało artykułów na ten temat.
Co do Twojej klasy Pages to jak mam przekazać do niej title ? I skąd ma wiedzieć co za View() ma być odpalone ?
Myślałem, że MVC działa na zasadzie właśnie:
Index > Kontroler > Widok > Akcja > Kontroler > Model > Kontroler > Widok...
Czyli index uruchamia kontroler, a ten uruchamia widok (chyba, że potrzebny jest od razu model), następnie odpalany jest widok, którym użytkownik może wykonać jakąś akcję np wyświetlenie czegoś, więc Widok poprzez Akcję łączy się z kontrolerem, ten pobiera dane z kontrolera i znowu wysyła je do widoku, przy czym widok jest aktualizowany.
Co to jest render() ?
Cytat(Dipter @ 26.06.2012, 16:25:40 )

Musisz wybrać inną logikę całej tej aplikacji, bo obecnie brniesz w złą stronę:
1. Jeśli ma być zaledwie 2-3 strony (które w dodatku mają być na sztywno ustawione) to imho nie opłaca się przerabiać tutaj wzorca MVC na wszelkie i odbiegające od niego formy, tylko wybranie czegokolwiek innego bardziej pasującego.
2. Jeśli zaś stwierdzisz, że później będziesz chciał coś powiększyć, dodać podstrony, to wtedy robisz sobie sam problem, ponieważ wszystko zacząłeś tworzyć na sztywno.
W cale nie powiedziane jest, że musisz korzystać z takich wzorców (z trzema warstwami), a nie innych skoro możesz zrobić aplikację
w oparciu o "dwie warstwy" - Jedną odpowiedzialną za logikę, a drugą za wszelkie możliwe dane i informacje. Istnieje wiele MVC - podobnych wzorców, które mogą o wiele bardziej przydać się do twojej sytuacji.
Np jakie inne wzorce ? Nie chcę dużego FW, chcę po prostu stworzyć sobie stronę, ale nie chciałem właśnie mieć jej na sztywno jeśli masz tutaj na myśli niezmienianie treści itd, chce mieć dostęp do tego w prosty sposób, a w przyszłości stworzyć panel, w którym będę mógł sam po zalogowaniu zmieniać treści, zdjęcia itd...
Dipter
26.06.2012, 15:36:20
Cytat
Np jakie inne wzorce ? Nie chcę dużego FW, chcę po prostu stworzyć sobie stronę, ale nie chciałem właśnie mieć jej na sztywno jeśli masz tutaj na myśli niezmienianie treści itd, chce mieć dostęp do tego w prosty sposób, a w przyszłości stworzyć panel, w którym będę mógł sam po zalogowaniu zmieniać treści, zdjęcia itd...
Nie miałem na myśli żadnego frameworka, tylko wzorce.
WZORZEC != FRAMEWORKWzorców jest od cholery za przeproszeniem: MVP (Tutaj klasyczny dla wielu frameworków w php), MVVM, HMVC (Znany z Kohany 3).
Na sztywno, miałem na myśli z góry ustalone widoki i kontrolery.
Z ostatniej części twojego postu wynika, że chcesz zbudować prosty CMS, w takim razie nikt nie każe korzystać z full-stack frameworka, ponieważ masz też coś takiego jak chociażby
Silex.
Zobacz sobie CodeIgniter, chyba najprostszy FW jaki powstał, jeśli w nim nie zrozumiesz MVC, to odpuść to sobie na jakiś czas.
render() - to tylko przykładowa opcja która pokazuje widok.
Cytat
Myślałem, że MVC działa na zasadzie właśnie:
Index > Kontroler > Widok > Akcja > Kontroler > Model > Kontroler > Widok...
Czyli index uruchamia kontroler, a ten uruchamia widok (chyba, że potrzebny jest od razu model), następnie odpalany jest widok, którym użytkownik może wykonać jakąś akcję np wyświetlenie czegoś, więc Widok poprzez Akcję łączy się z kontrolerem, ten pobiera dane z kontrolera i znowu wysyła je do widoku, przy czym widok jest aktualizowany.
Wszytkio kierujesz na index.php (.htacces). Na podstawie URI, Router (lub jak nie masz, to na podstawie GET, ale to i tak nie będzie dobre) uruchamia kontroler.
Cytat
Co do Twojej klasy Pages to jak mam przekazać do niej title ? I skąd ma wiedzieć co za View() ma być odpalone ?
$title to własnie parametr jaki przekazujesz do metody kontrolera, np w linku index.php?wczytajstrone=tytul tylko musisz parsować te dane z URI (paska adresu) żeby Router wiedział że ma odpalić ten kontroler z tym parametrem czyli może być to tak /page/show/tytul dla wersji z GET będzie to index.php?controller=pages&method=show¶m=tytul
I tak jak napisał poprzednik MVC != framework. MVC zostało już opisane tu całkowicie, ale jego implementacja nie jest prosta w PHP i potrzebny jest jakiś FW, bo ma w sobie odpowiednie funkcje.
Szymciosek
26.06.2012, 15:42:00
Na razie zostańmy przy samej czystej stronie z treścią, a panel to przyszłość.
Więc co powinien mieć u mnie index ? Uruchomienie powiedzmy Default_Controller ? A w nim uruchomienie podstawowego widoku, który zawiera w sobie menu i to co ma mieć strona index ? Klikając w menu przenosi mnie na www.xx.pl/index.pl?view=contact i tym samym znowu jest uruchamiany Default_Controller, ale już z innym widokiem tak ?
Implementacja MVC do takich prostych rzeczy jest po prostu nieopłacalna. bo co z tego że odpalisz Default_Controller jak nie jesteś w stanie go zmienić, przecież każda z podstron może mieć inny kontroler.
www.xx.pl/index.pl?view=contact
view to widok? To źle, bo w linku nie ma być danych o modelu czy widoku. Mają być tylko dane przekazane do kontrolera.
Szymciosek
26.06.2012, 15:52:45
Tak view to widok, a o czym pisaliśmy na początku tematu ? O $_GET, który przekazuje co ma być ładowane, a kontroler to odbiera.
Jak mam zacząć podstawy ? Od najprostszych rzeczy na przykładach oczywiście wszystko do coraz większych aplikacji, które mogą wykorzystywać MVC.
Chciałem stworzyć sobie stronę i nie chciałem za bardzo pisać wszystkiego w plikach index.php gallery.php contact.php tylko chciałem ładnie spróbować wykorzystać do tego celu właśnie MVC, wiem, że to mała strona jak na MVC, ale co mam od razu skakać do jakiegoś wielkiego serwisu budując go na MVC ?
GEt nie może być widokiem, ani modelem. Czytaj uważnie. Może jedynie przekazywać zmienne do kontrolera np. tytył podstorny jaka ma wczytać Wsadź ten kontroler Page do index.php i odpal, tylko $title podaj $_GET['title']
Szymciosek
26.06.2012, 16:01:57
Mógłbyś jakiś przykład całego mvc dać ?
Skąd Pages wie co to jest new View() ? czy to po prostu tak nazwałeś ?
Pages to kontroler, View to przykładowo Twoja klasa widoku.
Szymciosek
26.06.2012, 16:20:55
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p>MVC PHP Test</p>
<?php
include('views/index_view.php');
class Pages
{
public $title;
public function __construct()
{
$this->title = $_GET['view'];
$this->getPages($this->title);
}
public function getPages($title)
{
// na podstawie $title uruchamiasz model, który pobiera jakieś dane, cokolwiek np. tablicę z menu
// zapisujesz tę tablicę w zmiennej
$menu = array(); //wiadomo że tu ma być coś w stylu $menu = getMenu(); aby model zwrócił return z tablicą
// przekazujesz te dane do widoku
$view = new Index_View();
//$view->add($menu);
$view->add();
//i jak chcesz wyświetlasz
$view->render();
}
}
$pages = new Pages;
//include_once("controllers/controller.php");
//$request = $_GET['view'];
//$Controller = new Controller($request);
?>
</body>
</html>
Tak ?
Tylko co dalej ?
krzywy36
26.06.2012, 17:01:18
popatrz na ten kod i zastanów się czy logika programu została oddzielona od warstwy prezentacji

Zrobie Ci małe howto, żebyś mógł to zrozumieć:
załóżmy, że mamy adres postaci
Kod
localhost/index.php?url=kontroler/akcja/param1/param2/...
idąc dalej, załóżmy, że chcemy wyświetlić newsa o konkretnym id, w tym wypadku nasz adres będzie wyglądał tak:
Kod
localhost/index.php?url=news/pokaz/45
czyli, nasz kontroler to "news", nasza akcja to "pokaz" a nasz parametr (id) to 45.
W index.php parsujesz url, aby wyciągnąć kontroler, akcję i parametry po czym uruchamiasz to np. tak:
$controller = new $kontroler_z_adresu;
$controller->$akcja_z_adresu($parametry_z_adresu);
W tym wypadku klasa naszego kontrolera powinna wyglądać tak:
class NewsController {
// W konstruktorze tworzysz sobie model np.$model = new NewsModel;
public function pokaz($id) {
$news = $this->model->pobierzNewsa($id);
$view = new NewsView;
$view->loadData($news);
$view->render();
}
}
od razu mówię, że jest to tylko PRZYKŁADOWA implementacja, dodatkowo pisana z palca, modelu nawet nie pisze bo bedzie tam tylko prosta funkcja pobierajaca newsa na podstawie id a widok to znowu kwestia implementacji
Szymciosek
26.06.2012, 17:58:37
Krzywy, próbuję to ogarnąć, dopiero teraz, ale jak zrobić automatyczne logowanie danej klasy ? tzn jest coś takiego jak __autoload, ale czy to będzie dobre w index gdzieś ? Bo bez sensu jest robienie include wszystkich kontrolerów, a później ich wybieranie...
Cytat
Tak ?
Tylko co dalej ?
A gdzie odwołałeś się do metody getPages, podając jej parametr?
Cytat
jest coś takiego jak __autoload
Poczytaj o SPL (
spl_autoload_register), są też gotowe klasy do tego.
Szymciosek
26.06.2012, 19:25:36
Witam ponownie, siadłem i stworzyłem coś takiego:
http://dl.dropbox.com/u/21239599/mvc3.rarCzy teraz jest jakoś lepiej ?
krzywy36
26.06.2012, 19:41:08
tak na szybko:
if ($url_action)
{
$controller->$url_action();
}
elseif ($url_action && $url_param) {
$controller->$url_action($url_param);
}
ten elseif się nigdy nie wykona

. A autoloader może includować również modele i widoki na podstawie nazwy.
Szymciosek
26.06.2012, 19:46:58
A reszta jak ? Dobrze już to by było takie coś ?
Czemu ten elseif się nie wykona ?
Co masz na myśli z modelami i widokami ? Przecież każdy kontroler steruje powiedzmy swoją grupą widoków.
krzywy36
26.06.2012, 19:57:54
dziwnie widoki obsługujesz, ale to juz wizja programisty

u mnie np. widoki były plikami html i miałem do ich obsługi klasę "template". Generalnie każda implementacja MVC która będzie dzielić kod na 3 warstwy będzie dobra.
Co do elseif, nawet jeśli będzie ustawiona akcja i parametr to i tak wykona się pierwszy if, zamień warunki kolejnością i powinno być dobrze.
Trzecie pytanie - chodzi mi o to, że możesz tak napisać funkcję autoLoader, żebyś sam nic nie musiał includeowac.
Szymciosek
27.06.2012, 11:48:59
Co do Twojego template, to też widziałem takie klasy, muszę się im przyjrzeć, to działa chyba na zasadzie głównego szablonu i ładowania widoków (treści) do odpowiednich miejsc w szablonie ?
EDIT:
elseif już widzę, bo zawsze znajdzie mi url_action, jeśli podam już url_param
Pomyślę nad funkcją autoloadera
Może ktoś to ocenić ?
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.