laravel 尝试将两个参数从视图窗体传递到控制器时出错

i86rm4rw  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(178)

我有一个Laravel 6应用程序,我试图通过资源路由将两个参数从视图的表单传递到控制器。我可以传递一个,没有问题,但传递两个会出现同样的错误:
Too few arguments to function App\Http\Controllers\Admin\SubscriptionsController::update(), 1 passed and exactly 2 expected
我已经尝试了许多不同的安排,建议从其他职位,但没有带来预期的结果。
这是我的路线:

Route::resource('subscriptions', 'Admin\SubscriptionsController')

下面是我的视图中的表单:

{{ Form::open(['route' => ['admin.subscriptions.update', $plan->id, $coupon_code], 'method' => 'PUT', 'id' => 'role-' . $plan->id, $coupon_code]) }}
                                            Coupon Code: <input type="text" name="coupon_code">
{{ Form::close() }}

这是我的控制器。它没有达到dd()测试。

public function update($id, $coupon_code)
    {
        dd($coupon_code);
...

在错误页面中,我可以看到$coupon_code正在发送的POST数据。

然而,如果我从控制器中删除$coupon_code参数(留下public function update($id)),它可以很好地将$id从窗体传递到控制器,但是我没有得到我需要处理的$coupon_code数据。
欢迎提出任何建议。

au9on6nz

au9on6nz1#

由于您使用的是资源控制器,它不允许您将附加字段直接传递给它的update()路由,而是必须覆盖更新路由。
下面是你可以这样做,直接在你的资源.
您可以按如下方式添加新路线:

// web.php
Route::resource('subscriptions', 'Admin\SubscriptionsController')

// Make sure you add name when you are overriding the route
Route::put('subscriptions/{subscription}/{coupon_code?}', 'Admin\SubscriptionsController@update'])->name('admin.subscriptions.update');

我相信你不会每次都发送优惠券代码,所以你可以添加{coupon_code?}成为可选的.
在控制器的update()方法中,将coupon_code设置为可选

public function update($id, $coupon_code = null)
{
  ...
}
mklgxw1f

mklgxw1f2#

您不能为Route::resource添加新参数。如果您确实想使用2个参数,则应创建一个新路线。
例如:

Route::resource('subscriptions', 'Admin\SubscriptionsController')->except('update');
    Route::put('/subscriptions/{id}/{coupon_code}', 'Admin\SubscriptionsController@update')->name('subscriptions.update');

但是我认为最好不要使用方法参数,为什么不直接使用输入表单呢?
所以我们可以这样处理优惠券代码:

request()->coupon_code;

相关问题