我试图实现的是,我有一个接受名为type
的参数的路由,它现在接受任何值。但我想提供接受来自的值的选择,如果匹配路由有效,否则会抛出未找到的错误。
选择包括:
- 转发
- 收藏夹
- 推特
代码:
Route::get('/activity/{type}/status','ActivitiesController@status');
ActivitiesController.php
class ActivitiesController extends Controller
{
public function status($type, Request $request)
{
return $request->all();
}
}
您可以使用正则表达式约束,如:
Route::get('/activity/{type}/status','ActivitiesController@status')
->where('type', '(retweet|favorite|tweet)');
这将检查$type
。如果它不合适,它将重定向到404错误页面:
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');
此外,您还可以使用中间件。选择权在你。)