@DiaTMs

Как правильно реализовать mvc?

Доброго времени суток. Просмотрел много обучающих курсов и прочитал достаточно книг, но так и не понял концепцию mvc. Допустим у нас есть несколько файлов с разрешением .html или .php. Если файл существует браузер показывает его если нет выдает об ошибку об отсутствия файла. Проблема в следующем. Я видел 3 реализации и с которыми я несовсем согласен.

1) Сделать одну точку входа на сайт через mod_rewrite чтобы все запросы шли в index.php
.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php


В чём минус !-d структуру файлов можно просмотреть

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php


Теперь лучше но если обратится например к /app/controllers/Route.php

То будет ошибка так как файл подключается по другому пути от index.php

как должно быть

../views/error/404page.php

на самом деле

app/views/error/404page.php

2)Непонятно зачем создавать 2 директории

-app
models
views
controllers
-public
css
js
fonts
icons
images
index.php

Если перенаправить в public/index.php директория app будет закрыта но как тогда делать запросы ajax и получать ответы в виде json на клиент?

3) RewriteRule (.*) index.php?url=$1 [L,QSA]

Парсить из $GET['url'] для меня это минусы так как и по /news и по index.php?url=news сайт будет доступен.

Как реализовать mvc чтобы можно было избавится от ошибок + отправлять ajax запросы и получать ответы?
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
@grinat
У тебя есть некий class App который стартует при запросе, и в нем лежит Router, который обрабатывает запрос, разбирает /siski либо index.php?url=siski и решает какой контролер вызывать: SiskiContoller.php либо SiskiAjaxController.php когда запрос приходит в контролер, тот забирает данные из модели Siski, SiskiContoller данные ренредрит в файл siski который лежит во вьюхах, SiskiAjaxController делает json_encode для данных и отображает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы