Laravel 接收数组作为请求

Posted

技术标签:

【中文标题】Laravel 接收数组作为请求【英文标题】:Laravel receive array as request 【发布时间】:2019-02-13 22:40:39 【问题描述】:

javascript 中,我会这样做:

axios.post('/api/categories', 
   topCategories: JSON.stringify( data: ['a', 'b', 'c', 'd', 'e'] )
)

然后,在 Laravel 中,我收到了它:

protected function getCategories(Request $request) 
    $topCategories = $request->topCategories;
    var_dump(json_decode($topCategories));

但是,我总是在var_dump 中收到 null!为什么会这样?

【问题讨论】:

使用 dd(json_decode($topCategories)) 代替并检查结果。 那是null!是否有另一种方式在 POST 请求中接收数组? var_dump($request->topCategories['data']); 【参考方案1】:

您不需要使用 JSON.stringify。 Axios 自己做。

axios.post('/api/categories', 
   topCategories: ['a', 'b', 'c', 'd', 'e']
)

为了处理 POST 有效负载,请在 Laravel 中使用 $request->input()

protected function getCategories(Request $request) 
    $topCategories = $request->input('topCategories');
    dd($topCategories);

为了清楚起见:问题不在服务器端。您在那里正确地做所有事情,您可以使用$request->topCategories 从 POST 有效负载中检索数据。但是 ajax 有效载荷构建不正确。

【讨论】:

如何将其转换为数组? 你说“这个”是什么意思? Axios 会将您的有效负载对象转换为 JSON 并将其发送到您的服务器。 Laravel 将解析 JSON,其字段将通过 $request->input(<fieldName>) 提供。因此在执行$topCategories = $request->input('topCategories'); 之后,您将在$topCategories 变量中拥有一个正确的php 数组。【参考方案2】:

看看这个。希望这对您有所帮助。

https://github.com/axios/axios/issues/1440#issuecomment-379355382

【讨论】:

以上是关于Laravel 接收数组作为请求的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 发送数组作为 Laravel 的响应

Laravel 接收非简单请求出现的 OPTIONS 请求问题

通过 Ajax 传递对象数组并在控制器(Laravel)中作为输入

接收简单 JSON 请求时 RequestException.php 中的 Laravel ServerException

如何在 Laravel 5 中获取原始 json 请求有效负载?

如何在 Laravel 中根据客户端请求动态设置数据库