Пишу базовый PHP MVC, не знаю, с чего начать


Я работаю над личным проектом, основанным на PHP и MySQL, и я провожу небольшое исследование и играю с переписыванием. Допустим, у меня есть сайт...

http://www.myDomain.com/

И я хочу иметь index.php, или начальной загрузки, в корне домена. Так что, если вы получите доступ...

http://www.myDomain.com/admin/

Он все равно будет загружаться с index.php на верхнем уровне домена, который обрабатывает синтаксический анализ и загрузку файлов конфигурации, а также перенаправляет пользователя в нужное место, создавая красивые ссылки вдоль путь.

С чего мне следует начать свои исследования и обучение по этому вопросу? Я в некотором замешательстве. Спасибо за ваше время:)


Обновление:

Звучит так, как будто я действительно хочу перейти к системе MVC с фронтальным контроллером. Любые хорошие рекомендации по написанию моей собственной платформы MVC (были бы очень простыми). Честно говоря, я не хочу сейчас использовать фреймворк Zend (это сильно увеличило бы его объем!)

Author: Urda, 2010-03-04

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.

Кстати, другое название того, что вы называете начальной загрузкой, - фронт-контроллер. Вы можете погуглить этот термин, чтобы найти гораздо больше информации об этом шаблоне.

 2
Author: davidtbernal, 2010-03-04 02:24:47

Вам нужно будет посмотреть на настройку вашего .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'], чтобы начать маршрутизацию запросов к контроллерам.

 1
Author: alex, 2010-03-04 02:07:53