Panel admina w MVC
Data: 2017-09-20, autor: Michał MisztalPrzyjdzie kiedyś taki czas, że do strony pisanej w MVC przyjdzie dorobić panel admina. Pół biedy jeśli strona korzysta tylko z bazy danych. Większa bieda robi się gdy na serwer trzeba zdalnie wrzucać obrazki.
Pierwsze co to zmienimy plik naszej aplikacji na Route.php a klasę na Route bo w zasadzie jest to nasz router.
Powiedzmy, że zawartość plików admina będzie w katalogu "admin". Będą tam kontrolery, modele, widoki, folder "public" na style, js itp i plik index.php z zawartością
<?php
require "../.config/.env.php";
header("location:".ROOT."admin/index");
?>
Plik ten jest po to aby automatycznie przekierować wywołanie strona/admin do kontrolera index w katalogu admin. Jakoś automatyczne przekierowanie nie chce mi działać. Pora teraz na drobne modyfikacje w pliku "Route.php". Jeśli $url[0] to admin to trzeba przekierować całą aplikację do tego katalogu i przepisać $url by pozbyć się $url[0]==="admin". Czyli w kodzie by to wyglądało np tak
if($url[0]==="admin"){
$tmp_url=$url;
unset($url);
for($i=1;$i<count($tmp_url);$i++){
$url[$i-1]=$tmp_url[$i];
}
$url[0]=empty($url[0])||$url[0]==="index.php"?"index":$url[0];
$file="admin/controllers/".$url[0].".php";
if(file_exists($file)){
require $file;
$controller=new $url[0];
$controller->loadModel($url[0],"admin/");
$controller->index($url[1]);
}else{
require 'admin/controllers/error_404.php';
$controller=new Error_404();
$controller->index();
}
}else{
//wywołanie standardowej strony
}
Należy też pozmieniać inne pliki. Jak widać zmieniło się wywołanie modelu. Metoda ta prezentuje się teraz następująco
public function loadModel($name,$prefix=null){
$path=$prefix."models/".$name."_model.php";
if(file_exists($path)){
require $path;
$modelName=$name."_Model";
$this->model=new $modelName;
}
}
Zmianie uległy również kontrolery. Funkcja render dla indexu wygląda tak
$this->view->render("index/index","admin/");
Jeszcze tylko metoda render() w pliku "libs/View.php"
function render($name,$prefix=null){
require $prefix.'views/main.php';
}
No i modyfikacja "views/main.php"
include "admin/views/".$name.".php";
Plus poprawa wszystkich linków. I na razie to tyle.