Форум → Программирование → PHP для идиотов → По какому принципу работает роутинг и фронт контроллер
По какому принципу работает роутинг и фронт контроллер
-
Фев. 24, 2013, 1:43 п.п., спустя 8 минут 22 секунды
просто тупо создается экземпляр и выполняется метод? -
Фев. 24, 2013, 2:59 п.п., спустя 1 час 16 минут 11 секунд
обычно не get а request_uri, хотя в итоге он разбивается на тот же массив с переменными
можно по шагам разобрать
1. приходит тебе url вида /articles/123_how-do-you-do?a=b
2. у тебя есть роуты вида
$routes = array(
array('rule' => '#/articles/(?P<id>\d+)_[^/]*/?#', 'controller' => 'articles', 'action' => 'single_item'),
array(…),
)
3. ты вычленяешь из своего url часть /articles/123_how-do-you-do и прогоняешь последовательно по роутам
foreach ($routes as $route){
if (preg_match($route['rule'], $url, $params)){
$route['controller']->$route['action']($params);
}
}
// ошибка 404
собственно всёне всё полезно, что в swap полезло -
Фев. 24, 2013, 3:01 п.п., спустя 1 минуту 46 секунд
не нравится мне это дело. Если я без роутинга организую разделение логики и представления, я сильно говнокодю? -
Фев. 24, 2013, 3:05 п.п., спустя 4 минуты 35 секунд
просто тупо создается экземпляр и выполняется метод?
По-разному. Но чаще всего да, тупо создаётся экземпляр и выполняется метод.
Правильнее конечно будет потом передать в шаблон
$data = $route['controller']->$route['action']($params);
$tpl->render("{$route['controller']}/{$route['action']}.tpl", $data);
потом навешать свистелок с перделками типа динамического перехвата http-заголовков (Accept, Accept-Language и т.д.)Спустя 48 сек.Если я без роутинга организую разделение логики и представления, я сильно говнокодю?
умеренно. чем больше разрастётся тем сложнее поддерживатьне всё полезно, что в swap полезло -
Фев. 24, 2013, 3:24 п.п., спустя 18 минут 25 секунд
я не хочу использовать фрейморки, так как реализация моя обычна бывает очень лаконична. Даже сложные задачи решаются в 20-50 строк. А тут сотня чужих классов… Роутинг тоже в php мне представляется костылем -
Фев. 24, 2013, 3:27 п.п., спустя 2 минуты 42 секунды
Роутинг тоже в php мне представляется костылем
а сам php костылём не представляется? есть же htmlне всё полезно, что в swap полезло -
Фев. 24, 2013, 3:43 п.п., спустя 16 минут 37 секунд
Вообще говоря, всё программирование - суть манипуляция абстрациями. Вводятся новые абстракции, близкие к человеческим понятиям, позволяющие абстрагироваться от деталей и сконцентрироваться на главном. Роутинг - один из таких приёмов.не всё полезно, что в swap полезло -
Фев. 24, 2013, 4 п.п., спустя 16 минут 48 секунд
Ты, чувак, неправ и насчет фреймворков и насчет роутинга. Но это понимание придет (я надеюсь) с опытом.
я не хочу использовать фрейморки, так как реализация моя обычна бывает очень лаконична. Даже сложные задачи решаются в 20-50 строк. А тут сотня чужих классов… Роутинг тоже в php мне представляется костылем -
Фев. 24, 2013, 4:05 п.п., спустя 4 минуты 56 секунд
а есть ли готовая шкурка для роутинга? Без лишних наворотов. Мне не нужно все что дает фреймфорк. -
Фев. 24, 2013, 4:18 п.п., спустя 13 минут 32 секунды
А что ты ждешь от нее? Ведь простейший роутинг, который ну например по урлу вида site.ru/a/b создает экземпляр класса a и вызывает метод b (чисто умозрительный пример) - это всего лишь несколько строк кода.
а есть ли готовая шкурка для роутинга? -
Фев. 24, 2013, 4:33 п.п., спустя 14 минут 24 секунды
А что ты ждешь от нее? Ведь простейший роутинг, который ну например по урлу вида site.ru/a/b создает экземпляр класса a и вызывает метод b (чисто умозрительный пример) - это всего лишь несколько строк кода.
а есть ли готовая шкурка для роутинга?
да и я хренов изобретатель велосипедов
$uri = $_SERVER['REQUEST_URI'];
$array_uri = explode('/',$uri);
print_r($array_uri);
$controller = $array_uri[1];
$action = $array_uri[2];
$obj = new $controller();
$action = 'action_'.$action;
$obj-> $action(); -
Фев. 24, 2013, 5:17 п.п., спустя 44 минуты 30 секунд
Ну что-то типа этого
+ еще всякие проверки, на невалидные урлы. -
Фев. 24, 2013, 5:36 п.п., спустя 18 минут 23 секунды
про роутер были уже тысячи бесед
например http://pyha.ru/forum/topic/6748.msg152520#msg152520
кратко: роутер должен
а) разбирать урл и выдирать из него параметры
б) собирать урл на основе параметров и каких-то ещё признаков (опционально). например, могут быть именованные роутыне всё полезно, что в swap полезло -
Фев. 26, 2013, 8:24 д.п., спустя 1 день 14 часов 48 минут
а есть ли готовая шкурка для роутинга? Без лишних наворотов. Мне не нужно все что дает фреймфорк.
Возьми микрофреймворк какой-нибудь.
Например, Silex. По-умолчанию, включает только самый базовый набор функций (роутинг, сервис-контейнер, события, работа с запросом/ответом). При этом, при необходимости можно парой строчек подключать компоненты Symfony 2 (шаблонизатор, формы, доктрину и т.д.).
Пожалуйста, авторизуйтесь, чтобы написать комментарий!