Пишу базовый PHP MVC, не знаю, с чего начать
Я работаю над личным проектом, основанным на PHP и MySQL, и я провожу небольшое исследование и играю с переписыванием. Допустим, у меня есть сайт...
http://www.myDomain.com/
И я хочу иметь index.php, или начальной загрузки, в корне домена. Так что, если вы получите доступ...
http://www.myDomain.com/admin/
Он все равно будет загружаться с index.php на верхнем уровне домена, который обрабатывает синтаксический анализ и загрузку файлов конфигурации, а также перенаправляет пользователя в нужное место, создавая красивые ссылки вдоль путь.
С чего мне следует начать свои исследования и обучение по этому вопросу? Я в некотором замешательстве. Спасибо за ваше время:)
Обновление:
Звучит так, как будто я действительно хочу перейти к системе MVC с фронтальным контроллером. Любые хорошие рекомендации по написанию моей собственной платформы MVC (были бы очень простыми). Честно говоря, я не хочу сейчас использовать фреймворк Zend (это сильно увеличило бы его объем!)
2 answers
По сути, вы переписываете любой входящий запрос на свой index.php
. Вот пример .htaccess
из фреймворка Kohana:
# Turn on URL rewriting
RewriteEngine On
# Protect application and system files from being viewed
# RewriteRule ^(application|modules|system) - [F,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT,L]
Таким образом, ваш пример будет перенаправлен в index.php/admin
. Затем вы можете посмотреть на $_SERVER['REQUEST_URI']
, чтобы определить, что делать дальше.
Относительно распространенным шаблоном было бы использовать первый сегмент URI
в качестве контроллера, а второй - в качестве метода. Так, например:
$segments = explode($_SERVER['request_uri'], '/');//array('admin')
if(isset($segments[0]))
{
$class = $segments[0].'_controller';//'admin_controller
if(isset($segments[1]))
$method = $segments[1];
else
$method = 'index';
}
else
{
$class = 'index_controller';
$method = 'index';
}
$controller = new $class;
$controller->$method();
Этот код ни в коем случае не готов к производству, так как он умрет огненной смертью, если, например, пользователь посетил URL-адрес несуществующего контроллера. Он также не делает приятных вещей, таких как обработка аргументов. Но это своего рода идея, лежащая в основе того, как работает фреймворк PHP MVC.
Кстати, другое название того, что вы называете начальной загрузкой, - фронт-контроллер. Вы можете погуглить этот термин, чтобы найти гораздо больше информации об этом шаблоне.
Вам нужно будет посмотреть на настройку вашего .htaccess
для внутренней перезаписи всех запросов в ваш загрузочный файл, который может быть index.php
Кохана использует это для этого
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
Затем вы можете получить доступ к $_SERVER['REQUEST_URI']
, чтобы начать маршрутизацию запросов к контроллерам.