【问题标题】:Too few arguments to function App\Http\Controllers 1 passed and exactly 2 expected函数 App\Http\Controllers 的参数太少 1 已通过且恰好 2 预期
【发布时间】:2020-01-26 11:47:09
【问题描述】:

我正在尝试将一个数组和一个 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

有什么想法吗?

【问题讨论】:

标签: php laravel


【解决方案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),因此您需要在该数据数组中显式传递它。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      您声明了一个变量 campagne,但在您的控制器中,您将相应的函数声明为

      public function insert_clients($importData_arr, $id_campagne)
      

      这就是您收到错误的原因,您传递了一个变量 ($campagne),但控制器的方法需要两个变量 ($importData_arr$id_campagne)。

      你应该更新方法如下

      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');
      }
      

      【讨论】:

      • 知道了htmlspecialchars() expects parameter 1 to be string, array given
      • 这是因为$value 是一个数组。在这种情况下,您必须将数据序列化或将其编码为 JSON 并在控制器中对其进行解码。否则使用不同的策略(比如在会话中保存$importData_arr
      • 谢谢,我再解释一下我在做什么。我正在使用 CSV 文件导入数据,我知道该怎么做并且运行良好。但我做了一个确认页面,显示您正在导入的数据。我将在文件中获取的数据发送到我的视图,如果用户确认操作,我想将其发送回控制器。我认为有比制作表格并在其中发送变量更好的方法。
      • 我应该看到你的代码... 用户可以更新导入的数据吗?如果不是,则将其发回也没有用...只需将其保存在会话(或缓存)中,在视图中显示数据,控制器从会话(或缓存)中恢复数据。如果是,那么有很多解决方案......但这不是你所要求的,而且没有看到你的代码很难说......所以如果你为此创建一个新问题会更好。
      猜你喜欢
      • 2019-10-29
      • 2020-04-22
      • 2019-07-06
      • 2020-12-11
      • 2020-11-30
      • 1970-01-01
      • 2020-01-29
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多