Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Просьба помочь в поиске решения:
Если прописать роутинг контроллера
Route::controller('backend', 'BackendController');
то урл функций вида getSecurityUser будет /backend/security-users.
Хочется чтобы урл был вида /backend/security/users.
Как этого добиться?
Уверен есть решения как с mod_rewrite, так и без него.
Не в сети
Route::any('backend/security/users', 'BackendController@securityUser');
Не в сети
Это понятно, но хотелось бы, чтобы не нужно было вверху определения роутинга контроллера писать всякий раз роутинг для таких случаев. А если их будет 200?
Изменено shulfei (08.12.2013 10:26:47)
Не в сети
У вас нестандартный случай использования — система автоматически создаёт именно такой URL, если вам нужен другой — либо переопределять вручную, либо наследовать и перекрывать системные классы.
Лично я не вижу каких-то проблем с 200 контроллерами. Создайте свой класс или просто функцию, которая будет автоматически добавлять маршруты по вашему алгоритму. Можно сканировать методы объекта-контроллера, находя те, где есть две заглавных буквы. Для скорости можно кэшировать результат (массив маршрутов) и при новом запросе быстро добавлять их в систему без прохода по классам.
Не в сети
Спасибо, сделал как Вы посоветовали.
Не в сети
Не в сети
функция
static function dynamic_routings() {
$array = array(array('classname' => 'BackendController', 'url' => 'backend'));
foreach ($array as $r) {
if (Cache::has('dynamic_route_'.$r['classname']) && Cache::has('dynamic_route_'.$r['classname'].'_size')
&& Cache::get('dynamic_route_'.$r['classname'].'_size') == filesize(__DIR__.'/controllers/'.$r['classname'].'.php')) { // -- роутеры из кэша --
foreach (Cache::get('dynamic_route_'.$r['classname']) as $method) Route::any($r['url'].'/'.preg_replace('/_/', '/', $method), array('uses' => $r['classname'].'@____'.$method));
} else {
if (Cache::has('dynamic_route_'.$r['classname'])) Cache::forget('dynamic_route_'.$r['classname']);
if (Cache::has('dynamic_route_'.$r['classname'].'_size')) Cache::forget('dynamic_route_'.$r['classname'].'_size');
Cache::forever('dynamic_route_'.$r['classname'].'_size', filesize(__DIR__.'/controllers/'.$r['classname'].'.php'));
$routers = null;
foreach (get_class_methods($r['classname']) as $method) {
if (mb_substr($method, 0, 4) == '____' && mb_strstr(mb_substr($method, 4), '_')) {
$routers[] = mb_substr($method, 4);
Route::any($r['url'].'/'.preg_replace('/_/', '/', mb_substr($method, 4)), array('uses' => $r['classname'].'@'.$method));
}
}
if ($routers) Cache::forever('dynamic_route_'.$r['classname'], $routers); // -- запись роутеров в кэш --
}
}
}
вызов перед маршрутом restful контроллера
func::dynamic_routings();
Не в сети
Страницы 1