MVC po swojemu

Data: 2017-08-09, autor: Michał Misztal

Jako, ż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ść.

Skomentuj lub zgłoś błąd

© Michał Misztal 2023