Написание базового PHP MVC, не уверен, как начать - PullRequest
5 голосов
/ 04 марта 2010

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

http://www.myDomain.com/

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

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

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

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


Обновление:

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

Ответы [ 2 ]

2 голосов
/ 04 марта 2010

По сути, вы переписываете любой входящий запрос на ваш index.php. Вот пример .htaccess из Kohana framework:

# 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.

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

1 голос
/ 04 марта 2010

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

Kohana использует это для этого

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

...