отправлять каждый запрос соответствующему контроллеру - PullRequest
2 голосов
/ 13 декабря 2010

Я хочу сделать небольшое веб-приложение, и я не знаю, как это сделать. То, что я хочу сделать, это отправлять каждый запрос на правильный контроллер. Вид того, как CodeIgniter делает это.

Так что, если пользователь запрашивает domain.com/video/details Я хочу, чтобы мой файл начальной загрузки (индекс?) Отправил его в класс контроллера «Видео» и вызвал метод «детали» в этом классе.

Если пользователь запрашивает domain.com/profile/edit, я хочу отправить его в класс контроллера "Profile" и вызвать метод "edit" в этом классе.

Может кто-нибудь объяснить, как я должен это сделать? У меня есть некоторый опыт использования фреймворков MVC, но я никогда не «что-то писал» с MVC.

Спасибо!

Редактировать: Теперь я понимаю, как URL указывает на нужный контроллер, но не вижу, где создается экземпляр объекта контроллера, чтобы вызвать правильный метод?

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

Вам необходимо перенаправить ваши запросы. Используя apache, это можно сделать с помощью mod_rewrite.

Например, добавьте файл .htaccess в общедоступный базовый каталог и добавьте следующее:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

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

Это перенаправит пользователей, пытающихся получить доступ к

/ профиль / редактировать

до

index.php? В = профиль / редактировать

В index.php вы можете получить доступ к $ _ GET ['rt'] , чтобы определить, какой контроллер и какое действие было запрошено.

0 голосов
/ 13 декабря 2010

В зависимости от того, что вы хотите сделать, или от того, сколько работы вы хотите сделать, другой вариант, чем написание собственного MVC, - это использование Zend Framework. Он делает именно то, что вы просите и многое другое. Вам все еще нужно настроить перезапись URL, как указано в других ответах, но это быстро и просто.

Даже если вы не заинтересованы в Zend Framework, следующая ссылка может помочь вам настроить правила перезаписи: http://framework.zend.com/wiki/display/ZFDEV/Configuring%2BYour%2BURL%2BRewriter

0 голосов
/ 13 декабря 2010
  1. Используйте mod-rewrite (.htaccess), чтобы переписать URL с www.example.com/taco на www.example.com/index.php?taco/
  2. в index.php,возьмите первый ключ параметра URL, используйте его для направления на правильный URL.Как это будет выглядеть как "taco /"
  3. Вы можете добавить / вперед и назад, если он не существует.Так как это нормализует URL и облегчит жизнь
  4. Если вы хотите сохранить возможность иметь традиционные строки запроса.Проверьте URL-адрес напрямую и возьмите часть строки запроса.сломать это на?, что оставит вас с информацией о маршрутизации в ключе 0, а остальное - в ключе 1. разделите это на &, затем разделите каждый из них на = и установите первое в ключ, а второе в значениемассив.Замените $ _GET этим массивом.

Пример:

$path = explode("?", $_SERVER["QUERY_STRING"],2);
$url = $path[0];
if(substr($url,0,1) != "/")
{
    $url = "/".$url;
}
if(substr($url,-1,1) != "/")
{
    $url = $url."/";
}
unset($_GET);
foreach(explode("&", $path[1]) as $pair)
{
    $get = explode("=", $pair, 2);
    $_GET[$get[0]] = $get[1];
}

// Define the Query String Path
define("QS_PATH", $url);
...