【问题标题】:How to send different parameters to the same function? (laravel 5.3)如何将不同的参数发送到同一个函数? (laravel 5.3)
【发布时间】:2017-01-05 10:13:31
【问题描述】:

我的看法是这样的:

...
<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时会报错?

【问题讨论】:

  • 在我看来,如果users/create/2016是一个有效的链接,那么另一个链接应该是users/create/2016/14144499452111901,而不是相反。

标签: php laravel laravel-5.3


【解决方案1】:

您应该使用optional parameters 功能:

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

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

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

【讨论】:

  • 存在这样的错误:Route [users.create.display.year] not defined. (View: C:\xampp\htdocs\mysystem\resources\views\users\table.blade.php) (View: C:\xampp\htdocs\mysystem\resources\views\users\table.blade.php)
  • 正如我之前所说,您只需要一种方法和一种路线。您收到错误是因为您使用的路由名称不存在。到处使用users.create.year 路由。
  • 好的。没有错误,但结果有点奇怪。结果:2016 14144499452111901。应该是14144499452111901 2016
  • 我更改了路线定义中的年份和显示顺序。如果您将可选参数放在非可选参数之前,我不确定可选参数是否会起作用。但如果顺序如此重要,您可以尝试这样做。
【解决方案2】:
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();
    ...
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多