Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ЧПУ в MVC, какой подход лучше?


Автор: Kotakota 26.2.2011, 22:04
Привет, хочу написать свой фреймворк.
Возник вопрос по поводу ЧПУ.
Возьмем к примеру, такой УРЛ: http://somesite.com/2011/01/01/news/archive
Вывести архив новостей за 2011.01.01

Какой подход лучше использовать:
1. Роутер.
Разбиваем УРЛ и смотрим, что подключать.
2. Использовать переменные типа:
http://somesite.com/index.php?y=2011&m=01&d=01&directory=news&subdirectory=archive
А потом с помощью mod_rewrite приводить это к http://somesite.com/2011/01/01/news/archive

И еще вопрос при использовании первого метода, как лучше выделить контроллер, действие?

Автор: SamDark 26.2.2011, 23:23
Роутер — более гибкое решение.

http://rmcreative.ru/blog/post/mvc-front-controller-controller-i-router

Автор: Muerto 27.2.2011, 00:49
SamDark Вы так пиарите Yii что соблазняет таки его заценить  smile 
Я как то пытался с ним подружиться, но за место облегчения жизни , получил лишь осложнение  smile 

У меня просто есть как бы мой фреймворк, на котором я леплю сайты, и поскольку писал его я, то он мне очень понятен и интуитивен 

Так что даже не знаю, выйграю ли я если насильно себя заставлю работать с Yii

Автор: Noviy 27.2.2011, 18:08
Будущее за cmf smile

Автор: SamDark 28.2.2011, 13:08
Muerto
Я не пиарю особо, я просто его разрабатываю smile Разговор не для этой темы, либо в новой, либо в личку. Тут оффтоп выходит.

Автор: Kotakota 28.2.2011, 14:17
Спасибо.
Еще пара вопросов по поводу MVC и роутера.

1. В некоторых просмотренных мной схемах MVC видел взаимодействия роутера с отображением (view).
Роутер передает разобранный URL в контроллер, контроллер выполняет определенное действие взаимодействуя с данными из модели
если это необходимо, а потом результат передается в отображение.
Зачем нужна связь роутера и отображения непонятно?

2. Как лучше получить поисковую строку браузера?
Через QUERY_STRING, $_SERVER или еще варианты?

3. Допустим разобранная строка находится в массиве arr[].
Планирую сделать так:
arr[0] - контроллер
arr[1] - метод
arr[2] и arr[2..N] - параметры

Правильно это будет или нет?

4. Не могу понять, зачем использовать mod_rewrite в .htaccess, там где мы берем URL, разбиваем его и подключаем то, что необходимо.
В этом есть какая либо необходимость?
Все ведь делается вручную.

Автор: SamDark 28.2.2011, 18:22
1.
Цитата

Роутер передает разобранный URL в контроллер, контроллер выполняет определенное действие взаимодействуя с данными из модели
если это необходимо, а потом результат передается в отображение.

Это нормальная схема работы MVC. Что имеется ввиду под взаимодействием роутера и отображения?

2. Вариантов много. С разными серверами всё по-разному. Смотреть стоит на: HTTP_X_REWRITE_URL, REQUEST_URI, HTTP_HOST, ORIG_PATH_INFO, QUERY_STRING.

Выглядеть это должно примерно как в http://www.yiiframework.com/doc/api/1.1/CHttpRequest/#getRequestUri-detail (нажать show).

3. Смотря что потом делать с этим.
4. Он используется по минимуму для того, чтобы убрать из URL index.php.

Автор: Kotakota 28.2.2011, 20:24
1. http://www.youtube.com/watch?v=2EYzb3kjIDk
Объясняет принципы MVC в PHP
2. Спасибо, интересный фреймворк.
3. А что потом с этим обычно делают?
Передают контроллеру, разве нет? 
4. Понятно.
А чем плох "DirectoryIndex index.html" в конфигурации Апача или в .htaccess? 

Автор: SamDark 1.3.2011, 13:25
3. Да, но передавать можно в разном виде. Вот от вида и зависит, что надо делать.
4. Не знаю smile

Автор: Kotakota 1.3.2011, 14:23
Цитата(SamDark @ 1.3.2011,  13:25)
3. Да, но передавать можно в разном виде. Вот от вида и зависит, что надо делать.

Что Вы имеет в виду, под разным видом?

Автор: SamDark 1.3.2011, 16:30
Ну, например, в контроллер они могу поступать так:

Код

function actionSave($id){
 …
}


или

Код

function actionSave(){
  $id = $_GET['id'];
}


или

Код

function actionSave(){
  $id = $this->request('id');
}


или

Код

function actionSave($params){
  $id = $params['id'];
}


Вариантов бесконечно много.

Автор: Kotakota 1.3.2011, 18:55
Вы наверное догадались, что дальше последует вопрос, а какой способ лучше?
И вы правы smile
Наверняка в Yii есть пример?

Автор: SamDark 1.3.2011, 19:21
В Yii работают примерно в таком виде первые три способа.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)