如何向同一个函数发送不同的参数? (laravel 5.3)

How to send different parameters to the same function? (laravel 5.3)

我的看法是这样的:

...
<a class="btn btn-primary pull-right" style="margin-top: -10px;margin-bottom: 5px" href="{!! route('users.create.year', [$year]) !!}">
    Add New
</a>
...

...
@foreach($testArray as $key)
...
<a class="btn btn-primary btn-xs" href="{!! route('users.create.display.year', [$key['display'], $year]) !!}">
    <i class="glyphicon glyphicon-plus"></i>
</a>
...
@endforeach
...

我的路线是这样的:

Route::get('users/create/{year}', 'UserController@create')
     ->name('users.create.year');

Route::get('users/create/{display}/{year}', 'UserController@create')
     ->name('users.create.display.year');

我的控制器是这样的:

public function create($display = null, $year)
{
    echo $display;
    echo $year;die();
    ...
}

当我这样调用 url 时:http://localhost/mysystem/public/users/create/2016

存在这样的错误:

 1/1 ErrorException in UserController.php line 314: 
 Missing argument 2 for App\Http\Controllers\UserController::create() 

当我这样调用 url 时:http://localhost/mysystem/public/users/create/14144499452111901/2016` 结果是这样的:

14144499452111901
2016

为什么我用一个参数调用 url 时会出错?

Route::get('users/create/{year}', 'UserController@create')
     ->name('users.create.year');

Route::get('users/create/{display}/{year}', 'UserController@create')
     ->name('users.create.display.year');

你在这里定义了两条路由,只有一个控制器。

public function create($display = null, $year)
{
    echo $display;
    echo $year;die();
    ...
}

所以当你做这样的事情时http://localhost/mysystem/public/users/create/2016

它发送给具有多个参数的那个。

解决方案是创建两个控制器,每条路线一个

public function create($display = null, $year)
{
    echo $display;
    echo $year;die();
    ...
}

public function create( $year)
{
    echo $display;
    echo $year;die();
    ...
}

您应该使用 optional parameters 功能:

Route::get('users/create/{year}/{display?}', 'UserController@create')->name('users.create.year');

只使用一种方法,但带有可选参数:

public function create($year, $display = null)

你也可以在控制器中使用 Request 对象

public function create(Request $request) { $request->year; ... }