W celach treningowych projektuje sobię aplikację na MVC, przeczytałem dość dużo artykułów na temat MVC, z których się dowiedziałem, że zarówno Controller i View musi obsługiwać warstwę modelu.
I tu zwracam się do was z prośbą o pomoc w rozwikłaniu tego problemu, bo zastanawiam się jak to zaprojektować, by kontroler i widok używały tej samej instancji modelu, a także mam takie pytanie: Jak widok powinien wyglądać?
A tutaj cały kod, który dotychczas napisałem:
Index.php
<?php //Installation path(Do not change this, unless you know what are you doing) /* *-------------------------------------------------- *---------------CONFIGURATION SECTION-------------- *-------------------------------------------------- */ //Home page - Default page //Must be existing controller /* *-------------------------------------------------- *-----------------------PATHS---------------------- *-------------------------------------------------- */ $paths['app'] = BASE_DIR.DIRECTORY_SEPARATOR.'application'.DIRECTORY_SEPARATOR; $paths['controllers'] = $paths['app'].'controllers'.DIRECTORY_SEPARATOR; $paths['models'] = $paths['app'].'models'.DIRECTORY_SEPARATOR; $paths['views'] = $paths['app'].'views'.DIRECTORY_SEPARATOR; $paths['libs'] = $paths['app'].'libraries'.DIRECTORY_SEPARATOR; $paths['helpers'] = $paths['app'].'helpers'.DIRECTORY_SEPARATOR; $paths['styles'] = $paths['app'].'styles'.DIRECTORY_SEPARATOR; //Ustawienia środowiska /* * Środowisko służy do ustawiania trybu wyświetlania błędów * Istnieją 3 tryby * * 0 - Produkcja (Błędy nie są wyświetlane) * 1 - Testowanie (Wyświetlane są ostrzeżenia oraz uwagi) * 2 - Rozwój (Wszystkie błędy są wyświetlane) * * Tutaj możesz zmienić ustawienia środowiska: */ /* *-------------------------------------------------- *------------END OF CONFIGURATION SECTION---------- *-------------------------------------------------- */ switch(SRODOWISKO){ case 0: break; case 1: break; case 2: break; default: break; } } else{ } //Check if CMS is installed } //Check if paths are valid } //Autoload called classes spl_autoload_register( function ($className) { $fileName = ''; $namespace = ''; } require $paths['app'].$fileName; }); //Load error class $error = new Libraries\Error(); $url = filter_var($_GET['url'], FILTER_SANITIZE_URL); } else{ $url = DEFAULT_CONTROLLER; } $controller = "Controllers\\{$url[0]}"; $controller = new $controller; case 1: if(method_exists($controller, 'main')){ $controller->main(); } else{ $error->display404(); } break; case 2: if(method_exists($controller, $url[1])){ $controller->{$url[1]}(); } else{ $error->_404(); } break; case 3: if(method_exists($controller, $url[1])){ $controller->{$url[1]}($url[2]); } else{ $error->display404(); } break; case 4: if(method_exists($controller, $url[1])){ $controller->{$url[1]}($url[2], $url[3]); } else{ $error->display404(); } break; case 5: if(method_exists($controller, $url[1])){ $controller->{$url[1]}($url[2], $url[3], $url[4]); } else{ $error->display404(); } break; case 6: if(method_exists($controller, $url[1])){ $controller->{$url[1]}($url[2], $url[3], $url[4], $url[5]); } else{ $error->_404(); } break; } } else{ $error->_404(); }
Controller.php
<?php namespace Libraries; class Controller{ private $model; private $view; public function __construct(){ $this->view = new \Libraries\View(); } public function _loadModel($name){ require_once('{$models}{$name}_model.php'); $model = '$name_model()'; $this->model = new $model; } }
View.php
<?php class View{ private $model; public function __construct(){ //$this->model = new } public function getTemplate($template){ $path = '{BASE_DIR}/cache/templates/{$template}_cache.html'; } else{ $template = $this->model->fetchTemplate($template); $this->template[$template] = $template; } } }
Przeczytałem również, że widok nie powinien działać jak template engine, więc to do czego dążę już jest pewnie źle, proszę o nakierowanie w dobrą stronę, bo wszędzie gdzie szukam w internecie czy po polsku, czy angielsku, żaden artyku nie omawia wyczerpująco MVC, a większość artykułów wprowadza w błąd. Warstwy modelu nie zacząłem ze względu na to, że przeczytałem, że model to nie klasa, więc siętrochę pogubiłem.
Z góry dziękuje
