我想创建一个获取所需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?
});
任何帮助将不胜感激。我确定有一个简单的答案,但我无处可寻。
提前感谢您的帮助!
答案 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
}
我希望这可以帮助某人像我一样简化可选参数!
答案 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