传递给函数App \ Http \ Controllers的参数太少,传递了1个,恰好期望2

时间:2019-09-26 08:34:28

标签: php laravel

我正在尝试将一个数组和一个ID作为参数传递给控制器​​函数,但是它不起作用。

我以不同的方式尝试了多次,但仍然无法正常工作。

view.blade.php

<form method="post" action="{{ route('clients.insert_clients', [$campagne->id, 'importData_arr' => $importData_arr, 'id_campagne' => $campagne->id]) }}">

web.php

Route::post('clients/importer/{campagne}', 'CampagneController@upload_clients')->name('clients.upload_clients');

CampagneController.php

public function insert_clients($importData_arr, $id_campagne)

我得到的错误

Too few arguments to function App\Http\Controllers\CampagneController::insert_clients(), 1 passed and exactly 2 expected

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

更改

<form method="post" action="{{ route('clients.insert_clients', [$campagne->id, 'importData_arr' => $importData_arr, 'id_campagne' => $campagne->id]) }}">

收件人

<form method="post" action="{{ route('clients.insert_clients', ['campagne' => $campagne->id, 'importData_arr[]' => $importData_arr]) }}">

更改

public function insert_clients($importData_arr, $id_campagne)

收件人

public function insert_clients($campagne, Request $request)

您具有由路由定义的必需参数(campagne),因此您需要在该数据数组中显式传递它。

答案 1 :(得分:1)

您需要使用2个参数而不是1个参数来定义路线。

Route::post('clients/importer/{importData}/{campagne}', 'CampagneController@upload_clients')->name('clients.upload_clients');

答案 2 :(得分:1)

我认为您正在尝试以一种非常混乱的方式实现目标。首先您的路线

Route::post('clients/importer/{campagne}', 'CampagneController@upload_clients')

您在声明单个变量campagne,但在控制器中您将相应的功能声明为

public function insert_clients($importData_arr, $id_campagne)

这就是为什么出现错误,传递单个变量($campagne)的原因,但是控制器的方法需要两个变量($importData_arr$id_campagne)。 / p>

您应按以下方式更新方法

public function insert_clients($campagne)

以及您的表格:

<form method="post" action="{{ route('clients.insert_clients', ['campagne' => $campagne->id]) }}">

@foreach($importData_arr as $value)
<input type="hidden" name="importData_arr[]" value="{{ $value }}" />
@endforeach

<!-- Other fields -->

提交表单后,您可以按以下方式恢复数据:

public function insert_clients($campagne) {
   $importData_arr = request()->get('importData_arr');
}