我有一个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
数据。
欢迎提出任何建议。
2条答案
按热度按时间au9on6nz1#
由于您使用的是资源控制器,它不允许您将附加字段直接传递给它的
update()
路由,而是必须覆盖更新路由。下面是你可以这样做,直接在你的资源.
您可以按如下方式添加新路线:
我相信你不会每次都发送优惠券代码,所以你可以添加
{coupon_code?}
成为可选的.在控制器的
update()
方法中,将coupon_code
设置为可选mklgxw1f2#
您不能为
Route::resource
添加新参数。如果您确实想使用2个参数,则应创建一个新路线。例如:
但是我认为最好不要使用方法参数,为什么不直接使用输入表单呢?
所以我们可以这样处理优惠券代码: