如何为Laravel路由参数

时间:2016-04-30 09:14:14

标签: php laravel routes

我想要完成的是,我有一个接受名为type的参数的路由,它现在接受任何值。但是我想提供接受值的选择,如果匹配路由有效,否则抛出Not found错误。

选择是:

  1. 转推
  2. 喜爱
  3. 鸣叫
  4. 代码:

    Route::get('/activity/{type}/status','ActivitiesController@status');
    

    ActivitiesController.php

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

2 个答案:

答案 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。这是你的选择。 )