2016-05-02 2 views
1

Я создаю RESTful API, используя Laravel 5.1. По умолчанию маршрут будет api. Пользователю разрешено создавать службу URL-адресов, используя столько параметров, сколько она хочет, скажем .../api/p1/p2/.../pn.Маршруты Laravel с неограниченными параметрами для RESTful API

Как мне сделать один маршрут, чтобы указать на один контроллер, поэтому служба будет обрабатываться в одном контроллере?

Примечание. Сначала приложение просто должно знать, существует или нет служба, сравнивая url с хранимой службой в базе данных. Что касается самой службы, ее можно запросить позже в базе данных.

Я читал, что мы можем использовать * в Laravel 4, а как насчет Laravel 5.1?

Я пробовал:

Route::resource('/api/*', 'APIServiceController'); но он не работает на неограниченное количество параметров

или можно сделать это как этот

Route::group(['prefix' => 'api'], function() { //what should I put in the closure, how can I redirect it to a single controller });

ответ

3

Написать свой маршрут, как показано ниже: -

Route::group(['prefix' => 'api'], function() { 
    // this route will basically catch everything that starts with api/routeName 
    Route::get('routeName/{params?}', function($params= null){ 
     return $params; 
    })->where('params', '(.*)'); 
}); 

Перенаправление к контроллеру,

Route::group(['prefix' => 'api'], function() { 
    Route::get('routeName/{params?}', '[email protected]')->where('params', '(.*)'); 
}); 

Если вы хотите сделать routeName динамический, то просто напишите его в фигурных скобках, как показано ниже: -

Route::get('{routeName}/{params?}', '[email protected]')->where('params', '(.*)'); 

Надеюсь, это вам помогут :-)

+0

Благодарим вас за ответ. «RouteName» также создается динамически, поэтому я не хочу определять маршрут один за другим, жестко кодируя его на маршруте, потому что его может быть много. –

+0

после тестирования вашего решения я изменяю 'routeName' на переменную' {slug} ', поэтому мне не нужно определять имя маршрута один за другим. –

+0

Да. Если вы определяете имя маршрута как {slug}, то это имя становится динамическим. –

2

Вы можете попробовать этот трюк

Route::get('{pageLink}/{otherParams?}', '[email protected]')->where('otherParams', '(.*)'); 

Вы должны поместить его в конец файла route.php, поскольку он похож на маршрут «поймать все».

class IndexController extends BaseController { 

    public function get($pageLink, $otherParams = null) 
    { 
     if($otherParams) 
     { 
      $otherParams = explode('/', $otherParams); 
     } 
    } 

} 
+0

спасибо. Он работает так, как я хочу. Чтобы обрабатывать любой метод, я изменился с любого на любой. –

Смежные вопросы