如何正确使用数组作为路由参数

How to use array as route parameter properly

我有一个包含此操作的表格:

<form method="POST" action="{{ route('products.create.post.attribute',['product'=>$product->id,'total'=>$total_counts,'array'=>$attribute_ids]) }}">

所以基本上,$attribute_ids 是一个像这样的数组:

array:6 [▼
  0 => 14
  1 => 15
  2 => 16
  3 => 3
  4 => 7
  5 => 8
]

这是路线:

Route::post('/create/product/addAttribute/{product}/{total}/{array}', [ProductController::class, 'postAttribute'])->name('products.create.post.attribute');

然后在控制器中,我设置了这样的方法:

public function postAttribute(Request $request, Product $product, $total,$array){

但是我得到这个错误:

函数 ProductController::postAttribute() 的参数太少,在第 54 行 C:\projectname\vendor\laravel\framework\src\Illuminate\Routing\Controller.php 中传递了 3 个参数,正好有 4 个预期

那么这里出了什么问题?如何正确使用数组作为路由参数?

错误发生是因为您使用数组作为参数名称。更改参数名称,它应该可以工作。

blade

<form method="POST" action="{{ route('products.create.post.attribute',['product'=>$product->id,'total'=>$total_counts,'myarray'=>$attribute_ids]) }}">

路线

Route::post('/create/product/addAttribute/{product}/{total}/{myarray}', [ProductController::class, 'postAttribute'])->name('products.create.post.attribute');

控制器

public function postAttribute(Request $request, Product $product, $total, $myarray){

您不能在 url 中传递数组。您已经以字符串格式传递数组数据。 有两种方式传递数据:

  1. 在 URL - 你正在做的事情。
  2. 表单数据 - 使用 inpur 字段。

您必须使用 implode

生成该数组的字符串

创建 foreach 并在其中创建 input 并在输入字段中添加 name="attribute[]" id。这样你就会得到 $request->attribute 数组。