Laravel中如何将Eloquent查询的Post数据传递给DomPDF视图?
问题解决:Laravel后端无法正确接收前端传递的帖子ID数组
核心问题
前端直接通过axios发送纯ID数组时,Laravel的$request->all()无法正确解析到数组数据,导致Post::find($payload)查询不到结果,最终视图中$posts为空。
解决方案
方案一:前端修改请求格式(推荐)
将ID数组包裹在一个对象中发送,给数组指定一个键名,让Laravel可以通过键名直接获取数组:
let payload = posts.map((obj) => obj.id); this.$axios .post(`pdf_posts`, { post_ids: payload }) // 将数组放入对象的post_ids键中 .then((response) => { window.open(response.request.responseURL); }) .catch((error) => {});
后端对应修改为通过键名获取参数:
public function generatePostsPdf(Request $request) { $payload = $request->input('post_ids'); // 直接获取post_ids对应的数组 $posts = Post::find($payload); $data = [ 'posts' => $posts, ]; $pdf = Pdf::loadView('pdf_posts', $data); return $pdf->stream("pdf_posts.pdf"); }
方案二:后端修改参数获取方式(无需改动前端)
如果不想修改前端代码,后端可以直接解析请求的JSON原始数据来获取数组:
public function generatePostsPdf(Request $request) { $payload = $request->json()->all(); // 解析请求体中的JSON数组 $posts = Post::find($payload); $data = [ 'posts' => $posts, ]; $pdf = Pdf::loadView('pdf_posts', $data); return $pdf->stream("pdf_posts.pdf"); }
原因说明
axios默认以application/json格式发送请求,当直接发送纯数组时,Laravel的$request->all()方法是用于解析表单键值对数据(application/x-www-form-urlencoded格式),无法正确识别纯JSON数组。此时要么前端将数组包装成键值对结构,要么后端通过$request->json()方法直接解析JSON请求体,才能拿到正确的ID数组进行查询。
内容的提问来源于stack exchange,提问作者jose
相关产品推荐
相关产品推荐

