Реализация MVC (Процедурный стиль)

80
24 апреля 2021, 10:00

Начал изучать php и по немного пытаюсь разобраться с MVC (до ООП еще не добрался). Поставил себе цель: сделать простой проект с авторизацией, регистрацией и выводом статей.

Более менее разделив логику получилось так, как ниже. Собственно вопрос, логично ли составлен проект? Или я где я что не так делаю? (проект работает)

index.php

    $routes = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$controller = 'authorization';
$action = 'index';
if(!empty($routes[0])){   
    $controller = $routes[0];
}
if(!empty($routes[1])){
    $action = $routes[1];
}
$controller_path = $_SERVER['DOCUMENT_ROOT']."/core/controllers/".$controller.'.php';
if(file_exists($controller_path)){
     include ($controller_path);
}else{
    Error();
}
if(function_exists($action)){
    $action();
}else{
    Error();
}
echo ('<pre>');
print_r(array($controller,$action));
echo ('<pre>');

function Error(){
    header('HTTP/1.x 404 Not Found');
    header("Status: 404 Not Found");
    exit('Страница на которую вы пытаетесь попасть, не существует или была удалена!');
}

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Контроллеры выглядят так: core/controllers/authorization.php

    function index(){
    include_once ($_SERVER['DOCUMENT_ROOT'].'/core/views/authorization.php');
}
function check(){
    include_once ($_SERVER['DOCUMENT_ROOT'].'/core/models/check.php');
}

вид таким образом:

core/views/authorization.php

    <form action = "check" method = "post">
    <table>
        <tr>
            <td><input type = "text" name = "login"></td>
        </tr>
        <tr>
            <td><input type = "password" name = "password"></td>
        </tr>
        <tr>
            <td><button type="submit" name = "auth-in">Войти</button></td>
        </tr>
        <tr>
            <td><a href="/registration/">Регистрация</a></td>
        </tr>
    </table>
</form>

Модель таким образом:

core/models/check.php

    include($_SERVER['DOCUMENT_ROOT'].'/core/database/connect.php');
if(isset($_POST['auth-in'])){
    if(preg_match("/^[a-z0-9\-]{10,}+$/",$_POST['login'])&&preg_match("/^[a-z0-9]{10,}+$/",$_POST['password'])){
        $stmt = $pdo->prepare("SELECT * FROM users");
        $stmt->bindParam(':login', $login);
        $stmt->execute();
        $result = $stmt->fetchAll();
        print_r($result);
    }else{
        echo('Необходимо проверить данные');
    }
}else{
    echo ('А ты как тут оказался?');
}
if(isset($_POST['reg-in'])){
    echo('модель регистрации');
}
Answer 1

Начал изучать php и по немного пытаюсь разобраться с MVC (до ООП еще не добрался). . . . Или я где я что не так делаю? (проект работает)

Проект-то может и работает. Но, без ООП Вы MVC не построите.

Модели у Вас как таковой нет. Потому, что это структурированный объект, который описывает сущность бизнес логики. То, что у Вас в модели скорее подходит для контроллера.

Контроллеры по принципу 1 контроллер = функция = 1 действие. Для начала может и не плохо. Но, как минимум гибкости у такой архитектуры точно не будет. Для сравнения 1 класс контроллера того же Yii может обрабатывать несколько действий.

К представлению, правда, особых вопросов нет. Но с другой стороны, представление это по большей части вёрстка и JS. А, это совсем другая песня.

В общем как можно скорее добирайтесь до ООП, изучайте как устроены другие MVC фреймворки, используйте полученные знания в собственных проектах и Вы сами увидите, насколько упростится Ваша работа по сравнению с тем, что есть сейчас.

READ ALSO
Dropdown на ul li для языкового меню

Dropdown на ul li для языкового меню

Всем привет! Огромная проблема, не получается сделать дропдаун меню для языкового плагина Polyglot WordPressВызывается список в коде вот так: <ul><?php...

185
php dirname оставить последнюю папку

php dirname оставить последнюю папку

функция dirname выдает мне такую строку

79
как работает strtotime

как работает strtotime

strtotime('2018-09-20 16:49:54') кидаю первый аргументЭта функция чутко реагирует на настройки сервера временной зоны

89