MVC po swojemu
Data: 2017-08-09, autor: Michał MisztalJako, że na home.pl do którego przenosimy usługi również nie działa większość funkcji Laravela to postanowiłem napisać MVC od początku po mojemu. Na youtube jest bardzo ciekawy poradnik. Plik .htaccess sobie w całości z niego zapożyczę.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Teraz pora na strukturę katalogów, czyli
.config <- konfiguracja frameworka, np zmienne globalne czy ustawienia bazy controllers <- kontrolery models <- modele views <- widoki libs | <- aplikacja |- Controller.php <- główny kontroler |- Model.php |- View.php |- Projekt.php <- nazwa naszego projektu index.php <- główny plik programu
Powiedzmy, że na razie mamy dwie podstrony: główną i kontakt oraz rezerwową stronę dla błędów.
/index.php
<?php
require "libs/Controller.php";
require "libs/Model.php";
require "libs/View.php";
require "libs/Projekt.php";
$app=new Projekt();
libs/Controller.php
class Controller {
function __construct() {
echo "Main controller<br>";
}
}
libs/Model.php
class Model {
function __construct() {
echo "Main Model<br>";
}
}
libs/View.php
class View {
function __construct() {
echo "Main View<br>";
}
}
libs/Projekt.php
class Projekt {
function __construct() {
$url=filter_var($_GET['url'],FILTER_SANITIZE_URL);
$url=explode("/",$url);
$url[0]=empty($url[0])||$url[0]==="index.php"?"index":$url[0];
$file="controllers/".$url[0].".php";
if(file_exists($file)){
require $file;
new $url[0];
}else{
require "controllers/error.php";
new Error_404();
}
}
}
controllers/index.php
class Index extends Controller {
function __construct() {
require 'views/index.php';
}
}
controllers/kontakt.php
class Kontakt extends Controller {
function __construct() {
echo "Kontakt kontroler<br>";
}
}
controllers/error.php
class Error_404 extends Controller {
function __construct() {
echo "Błąd 404<br>";
}
}
views/index.php
echo "Index widok<br>";
Tak wygląda szkielet całego przedsięwzięcia. Kontrolery sterują wszystkim, modele zajmują się tylko przetwarzaniem danych a widoki prezentują treść.