2012-04-10 4 views
0

Я еще не нашел простую структуру MVC. Как фреймворки позволяют получить доступ к контроллеру только по URL? Я думаю, что это имеет отношение к QUERY_STRING, но разве это не должно быть ??Как получить доступ к контроллеру по URL-адресу в MVC

http://localhost/public/controllername 

и localhost/public расположен по адресу:

C:\wamp\www\public\ 

, который содержит index.php

+0

Вы можете проверить [Symfony2] (http://symfony.com), и это микро версия, [Silex] (http://silex.sensiolabs.org/). Это развязанная инфраструктура PHP, и вы можете использовать только те компоненты, которые вам нужны. Создатель Symfony имеет [серию сообщений в блогах] (http://fabien.potencier.org/article/50/create-your-own-framework-on-top-of-the-symfony2-components -part-1), объясняя, как создать структуру с компонентами Symfony. : –

ответ

1

Как правило, это делается через использование .htaccess переписывает (Apache mod_rewrite):

  1. Вы используете .htaccess, чтобы переписывать каждый запрос, который не является статическим файлом, в вашу основную точку входа, например index.php, при условии, что вы используете PHP в качестве своего серверного языка.
  2. Затем вы анализируете URI с точностью до index.php и устанавливаете некоторые маршруты в своем приложении.

Быстрый пример:

.htaccess файл:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

index.php файл:

$uri = $_SERVER['REQUEST_URI']; 
$parts = explode('/', $uri); 
// assuming you want /controller/action/* mapping 
$controller = 'index'; // default 
$action = 'index'; // default 
if (isset($parts[0])) $controller = $parts[0]; 
if (isset($parts[1])) $action = $parts[1]; 
// now, you'd try to establish some logic to test wether this controller/action 
// actually exists, and load it. I'll leave this up to you. 

Это, конечно, это просто быстрый и грубый пример, но должен дать вам представление о том, как это сделать.

+0

, но '$ parts [0]' пусто. И что, если я помещаю их во вложенные папки, содержимое '$ parts' меняется. – Michelle

+0

@JackSpairow это не сайт, на котором вы получите решение, которое вы можете просто скопировать/вставить в свое приложение. Вышеупомянутый код предназначен как указатель, а не как рабочее решение. Лучший способ заставить эту работу работать - попробовать ее сами. –

+0

Я просто пытался понять. – Michelle

-1

это работает разборе $ _SERVER [ 'REQUEST_URI']

Смежные вопросы