如何使用 axios 将数组从 javascript 传递到 laravel 控制器

How to pass arrays from javascript to laravel controller using axios

我正在使用 Laravel 5.4 并且我正在使用 Vue 2 处理我的数据。我正在尝试使用 axios 调用控制器方法,但我找不到传递两个数组的正确方法.我需要将它们发送到我的控制器,以便向它们发出一些数据库请求并取回一些数据。

我已经设法将数组作为字符串传递,如下所示,但是,我不希望在我的控制器上将字符串转换为数组。

有没有办法做与我在下面做的相同的事情,但将数组作为数组而不是字符串传递,或者这是不可能的吗?

Axios 在 Vue 上调用:

$rutas = ["01", "02"];
$tipos = ["01", "03", "04"];

var params = new URLSearchParams();
params.append("rutas", $rutas);
params.append("tipos", $tipos);

var request = {
  params: params
};
axios.get('/test/', request);

这是我的路线

Route::get('/test/', 'TestsController@getClientesPorRuta');

这是我的控制器的方法:

public function getClientesPorRuta(Request $request) {
  $rutas = $request->input('rutas');
  $tipos = $request->input('tipos');
  
  // Code like this doesn't work
  $index = 0;
  $register = Ruta::where('CODIRUTA','=',$rutas[$index])->first();
}

实际上您不必将该数组转换为字符串来执行此操作..您可以直接传递它..

var request = {
  rutas: $rutas,
  tipos: $tipos,
};
axios.post('/test/', request);

使用 axios.post 而不是 axios.get .. 因为 get 方法使用 url 来传递数据.. 而 url 不能包含数组,它正在转换它串成 1,2

同样在您的路线中,您应该将 Route::get 更改为 Route::post

Route::post('/test/', 'TestsController@getClientesPorRuta');

然后在您的 php $request->rutas 中已经设置为 ["01", "02"]