我想要完成的是,我有一个接受名为type
的参数的路由,它现在接受任何值。但是我想提供接受值的选择,如果匹配路由有效,否则抛出Not found错误。
选择是:
代码:
Route::get('/activity/{type}/status','ActivitiesController@status');
ActivitiesController.php
class ActivitiesController extends Controller
{
public function status($type, Request $request)
{
return $request->all();
}
}
答案 0 :(得分:6)
您可以使用正则表达式约束,例如:
Route::get('/activity/{type}/status','ActivitiesController@status')
->where('type', '(retweet|favorite|tweet)');
答案 1 :(得分:1)
这将检查$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:
只有您只有3种类型,并且您将来不会添加任何类型。这是一个愚蠢的,但更易读,更容易维护:
Route::get('/activity/retweet/status','ActivitiesController@status');
Route::get('/activity/favorite/status','ActivitiesController@status');
Route::get('/activity/tweet/status','ActivitiesController@status');
另外,你可以use middleware。这是你的选择。 )