Простой MVC мод-переписать - PullRequest
5 голосов
/ 13 июня 2009

Я не уверен, как сделать переписывание модов для модульной структуры MVC. То, что я хочу, чтобы это захватывает URL:

<a href="http://domainname.com/index.php?model=" rel="nofollow noreferrer">http://domainname.com/index.php?model=</a>{model}&view={view}&parameters={parameters}

ПРИМЕЧАНИЕ: параметры будут в определенном порядке и разделены трубами (если нет лучшего способа): параметры = param1 | param2 | param3

<a href="http://domainname.com/" rel="nofollow noreferrer">http://domainname.com/</a>{model}/{view}/{parameters}

Пример:

<a href="http://domainname.com/faq/edit/13" rel="nofollow noreferrer">http://domainname.com/faq/edit/13</a>

Другой пример:

<a href="http://domainname.com/faq/index/" rel="nofollow noreferrer">http://domainname.com/faq/index/</a>{sort}/{page}/{search} <a href="http://domainname.com/faq/index/asc/3/How+to" rel="nofollow noreferrer">http://domainname.com/faq/index/asc/3/How+to</a>

По существу, что угодно после модели и вида будет и может быть параметрами; столько, сколько нужно. Для каждого вида я буду знать возможные параметры этой области, допустимой и в каком порядке.

Заранее спасибо.

-

Используя код ниже, вот что у меня есть:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*) index.php?model=$1&view=$2&parameters=$3 [L,NS]

URL: <a href="http://localhost:8888/testing/faq/index/asc/5/How+to" rel="nofollow noreferrer">http://localhost:8888/testing/faq/index/asc/5/How+to</a>
Переменные PHP $ _GET:

Array
(
    [model] => faq/index/asc
    [view] => 5
    [parameters] => How to
)

Должно быть:

Array
(
    [model] => faq
    [view] => index
    [parameters] => asc/5/How to
)

Пожалуйста, помогите

Ответы [ 2 ]

11 голосов
/ 13 июня 2009

Вы можете использовать функцию PHP для этого. Быстро, без значения по умолчанию или обработки ошибок:

list( $controller, $function, $params ) = explode( '/', $uri, 3 );
$params = explode( '/', $uri );

А в .htaccess перенаправьте любой несуществующий запрос в файл обработки запросов PHP:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ mvc.php [L,NS]

Остерегайтесь фильтрации входных данных, не включая файлы и т. Д.

3 голосов
/ 13 июня 2009

Вы также можете получить свой htaccess следующим образом:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*) mvc.php?model=$1&view=$2&parameters=$3 [L,NS]

Это просто еще один способ сделать это, хотя лично я предпочитаю способ streetpc.

...