Laravel(5) - 使用可选参数路由到控制器

时间:2015-04-28 01:40:01

标签: routing laravel-5

我想创建一个获取所需ID的路线,以及可选的开始和结束日期(' Ymd')。如果省略日期,则它们将回退到默认值。 (比如说最后30天)并打电话给控制器....让我们说道路@ index'

Route::get('/path/{id}/{start?}/{end?}', function($id, $start=null, $end=null)
{
    if(!$start)
    {
        //set start
    }
    if(!$end)
    {
        //set end
    }

    // What is the syntax that goes here to call 'path@index' with $id, $start, and $end?
});

任何帮助将不胜感激。我确定有一个简单的答案,但我无处可寻。

提前感谢您的帮助!

6 个答案:

答案 0 :(得分:61)

无法通过[true == (0 > 60*60*24*365)] => [true == true] => [false] 关闭来调用控制器。

使用Route:::get并处理控制器功能中的参数:

Route::get('/path/{id}/{start?}/{end?}', 'Controller@index');

答案 1 :(得分:4)

这帮助我简化了可选的路线参数(来自Laravel Docs):

有时,您可能需要指定一个路由参数,但使该路由参数的出现为可选。您可以通过放置一个?在参数名称后标记。确保为路由的对应变量赋予默认值:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

或者,如果您的路线中有控制器呼叫操作,则可以执行以下操作:

web.php

Route::get('user/{name?}', 'UsersController@index')->name('user.index');


userscontroller.php

public function index($name = 'John') {

  // Do something here

}

我希望这可以帮助某人像我一样简化可选参数!

Laravel 5.6 Routing Parameters - Optional parameters

答案 2 :(得分:2)

我会用三个路径处理它:

Route::get('/path/{id}/{start}/{end}, ...);

Route::get('/path/{id}/{start}, ...);

Route::get('/path/{id}, ...);
  

请注意顺序 - 您希望首先检查完整路径。

答案 3 :(得分:1)

你可以通过这样的路由闭包来调用控制器动作:

Route::get('{slug}', function ($slug, Request $request) {

    $app = app();
    $locale = $app->getLocale();

    // search for an offer with the given slug
    $offer = \App\Offer::whereTranslation('slug', $slug, $locale)->first();
    if($offer) {
        $controller = $app->make(\App\Http\Controllers\OfferController::class);
        return $controller->callAction('show', [$offer, $campaign = NULL]);
    } else {
        // if no offer is found, search for a campaign with the given slug
        $campaign = \App\Campaign::whereTranslation('slug', $slug, $locale)->first();
        if($campaign) {
            $controller = $app->make(\App\Http\Controllers\CampaignController::class);
            return $controller->callAction('show', [$campaign]);
        }
    }

    throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

});

答案 4 :(得分:0)

我所做的是将可选参数设置为 query 参数,如下所示:

示例网址: /getStuff/2019-08-27?type=0&color=red

路线: Route::get('/getStuff/{date}','Stuff\StuffController@getStuff');

控制器:

public function getStuff($date)
{
        // Optional parameters
        $type = Input::get("type");
        $color = Input::get("color");
}

答案 5 :(得分:0)

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

在此处查找更多详细信息(Laravel 7):https://laravel.com/docs/7.x/routing#parameters-optional-parameters