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

时间:2017-01-04 22:24:48

标签: php laravel laravel-5.3

我的观点是这样的:

switch (myRover.direction) {
   case 'N':
    myRover.direction = myRoverDirections[3]
    break;

我的路线是这样的:

...
<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(); ... }

存在这样的错误:

http://localhost/mysystem/public/users/create/2016

当我这样称呼网址时: 1/1 ErrorException in UserController.php line 314: Missing argument 2 for App\Http\Controllers\UserController::create() / 14144499452111901 / 2016` 结果是这样的:

http://localhost/mysystem/public/users/create

为什么当我使用一个参数调用url时出现错误?

3 个答案:

答案 0 :(得分:3)

您应该使用optional parameters功能:

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

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

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

答案 1 :(得分:0)

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();
    ...
}

答案 2 :(得分:0)

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

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