2016-04-30 2 views
2

То, что я пытаюсь выполнить, у меня есть маршрут, который принимает параметр с именем type и он принимает любое значение сейчас. Но я хочу предоставить выбор для принятия значения из, если совпадает с маршрутом, в противном случае он выбрасывает Не найденную ошибку.Как обеспечить выбор параметра маршрута Laravel

Варианты:

  1. ретвит
  2. любимый
  3. твит

Код:

Route::get('/activity/{type}/status','[email protected]'); 

ActivitiesController.php

class ActivitiesController extends Controller 
{ 
    public function status($type, Request $request) 
    { 
     return $request->all(); 
    } 
} 

ответ

2

Вы можете использовать регулярные ограничения выражения, как:

Route::get('/activity/{type}/status','[email protected]') 
    ->where('type', '(retweet|favorite|tweet)'); 
+0

Спасибо, человек, это именно то, что я искал. –

0

Это проверит $type. Если это не подходит один, он будет redirect to 404 error page:

public function status($type, Request $request) 
{ 
    if ($type != 'retweet' && $type != 'favorite' && $type != 'tweet') { 
     abort(404); 
    } 

    return $request->all(); 
} 

Альтернатива:

Route::get('/activity/{type}/status', function() 
{ 
    if ($type == 'retweet' || $type == 'favorite' || $type == 'tweet') { 
     $app = app(); 
     $controller = $app->make('ActivitiesController'); 
     $controller->callAction($app, $app['router'], 'status', $parameters = array()); 
    } 
}); 

Альтернатива 2:

Только если у вас есть только три типа, и вы не будете добавлять любые в будущем. Это глупо один, но более удобным для чтения и легче поддерживать:

Route::get('/activity/retweet/status','[email protected]'); 
Route::get('/activity/favorite/status','[email protected]'); 
Route::get('/activity/tweet/status','[email protected]'); 

Кроме того, вы могли бы use middleware. Выбор ваш.)

+0

Я знаю этот путь, но я хочу, чтобы фильтровать запросы на сайте маршрутов, потому что у меня есть другие функции, которые тоже делают пост запросы на тот же синтаксис маршрута и я беру из них параметр '$ type', и если я буду следовать этому шаблону, мне придется поместить проверки в каждую функцию. –

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