Правила маршрута в контроллере

StalkerClasses

Новичок
В чем Вы видите минусы если правила маршрутизации определять в контроллере?

PHP:
class newsController extends controller {

$router = [
'news_index' => ["/", "actionIndex"];
'news_show' => ["/{id_news}","actionShow"]
'news_rss' => ["/rss.xml","actionRss"]
];

function actionIndex(){}

function actionShow($id_news){}

function actionRss(){}

}
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@StalkerClasses, Ты будешь обходить все контроллеры каждый раз и парсить их карту роутинга? Или сделаешь это один раз?
 

StalkerClasses

Новичок
Еще бы в качестве примера добавил Ajax-пути.
PHP:
class newsController extends controller {

$router = [
'news_index' => ["/", "actionIndex"],
'news_show' => ["/{id_news}","actionShow"],
'news_rss' => ["/rss.xml","actionRss"],
'news_ajax_up' => ["/ajax/raiting-up/', "actionRaiting", ['event'=>"up"]],
'news_ajax_down' => ["ajax/raiting-down", 'actionRaiting', ['event'=>'down']],
'нет совпадения' => '/404/'
];

function actionIndex(){}

function actionShow($id_news){}

function actionRss(){}

function actionRaiting($event = 'down'){
}

}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@StalkerClasses, за какой раз? Где тут роутер? Где матчинг?

Есть реквест на адрес /news/1-2-3, у тебя 12 контроллеров, как будешь разруливать?
 

ksnk

прохожий
Может - лучше посмотреть как роутинг делается в других местах? Вот пример описателя роутинга в CodeIgniter
PHP:
$route['products/([a-z]+)/(\d+)'] = '$1/id_$2';
$route['login/(.+)'] = 'auth/login/$1';
Отсюда
Все просто и очевидно? По моему - да... Тут решается задача по прилетевшей адресной строке получить `контроллер-параметры`. Если нужно решать еще и обратную задачу - нужно смотреть в более навороченные фреймворки, но для большинства случаев, imho, обратная задача не нужна, адресация фиксирована...
 

StalkerClasses

Новичок
@StalkerClasses, за какой раз? Где тут роутер? Где матчинг?

Есть реквест на адрес /news/1-2-3, у тебя 12 контроллеров, как будешь разруливать?
@c0dex, можно пожалуйста пример к моему примеру из 12 контроллеров, что бы не было возможным разрулить - примеры конфликтов.

Может - лучше посмотреть как роутинг делается в других местах? Вот пример описателя роутинга в CodeIgniter
PHP:
$route['products/([a-z]+)/(\d+)'] = '$1/id_$2';
$route['login/(.+)'] = 'auth/login/$1';
Отсюда
Все просто и очевидно? По моему - да... Тут решается задача по прилетевшей адресной строке получить `контроллер-параметры`. Если нужно решать еще и обратную задачу - нужно смотреть в более навороченные фреймворки, но для большинства случаев, imho, обратная задача не нужна, адресация фиксирована...
Как роутеры делаются знаю на примере фреймворков Laravel, Yii2.


Есть реквест на адрес /news/1-2-3, у тебя 12 контроллеров, как будешь разруливать?
В данном случае это будет ошибка 404.
Т.к. нет адреса /news/{id_news}
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@StalkerClasses, я не вижу ответа на мой вопрос. Я не писал о том, что что-то невозможно. Ты читаешь не то, что я пишу, а то, что тебе хочется видеть. Я спросил: как ты будешь обрабатывать несколько контроллеров и выдирать с них инфо о том, какие роуты у тебя в приложении есть? Код есть?
 

StalkerClasses

Новичок
@StalkerClasses, я не вижу ответа на мой вопрос. Я не писал о том, что что-то невозможно. Ты читаешь не то, что я пишу, а то, что тебе хочется видеть. Я спросил: как ты будешь обрабатывать несколько контроллеров и выдирать с них инфо о том, какие роуты у тебя в приложении есть? Код есть?
Как буду выдирать инфу:
Вариант первый:
делать glob("controllers/*.php") и делаю get_declaraded_class();
делаю get_vars_class();
Смотрю в классах переменную $router().
После все что есть в переменной $router делаю foreach($router as $k => $r){
router::addRouter($r);
}

Вариант второй сделаю такой тип функции в роуторе:
router::addRouterFromController("controllers/NewsController.php", "app\controllers\NewsController");

function addRouterFromController($fileName, $controllerName){
Функция делает include($fileName) и делает get_vars_class($controllerName);
После все что есть в переменной $router делаю foreach($router as $k => $r){
router::addRouter($r);
}
}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Короче как я и думал, ты ничего еще не сделал и вопрос был "в вакууме".

Просто не делай так, как ты хочешь. Бери симфони роутер и не мучай себя и нас.
 
Сверху