php - array_merge() 的 PHP 错误:预期参数 2 是一个数组,给定为空
问题描述
我正在尝试从 Ionic 4 向我的 Laravel API 发出 http 发布请求。我之前使用相同的 API 成功地发布了其他帖子。但由于某种原因,我无法使这个工作。
Laravel 后端的方法接收一个 ID,然后发送附有 PDF 的电子邮件。
我已经用 Postman 工具对其进行了测试,它工作正常。但是当我在 Ionic 4 App 上进行测试时,它不起作用。
我尝试用不同的选项更改标题,但没有运气。
我在 Laravel 后端设置了 CORS,如下所示:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS") {
die();
}
在 Postman 上,它按预期工作: https ://i.imgur.com/sNuJCzK.png https://i.imgur.com/ZgLJA20.png
这是我的Player.service.ts:
pdf(idPlayer): Observable<any> {
let json = {
idplayer : idPlayer
};
let params = "json=" + JSON.stringify(json);
const httpOptions = {
headers: new HttpHeaders({
'Accept': 'application/json',
'Authorization' : localStorage.getItem("token"),
'Content-Type' : 'application/x-www-form-urlencoded',
})
};
console.log("PDF PARAMS:");
console.log(params);
return this._http.post('http://127.0.0.1:8000/api/pdf/email', params, httpOptions);
}
这是在我的Tab-Profile.page.ts上调用服务的函数:
enviarPdf() {
this._playerService.pdf(this.player._id).subscribe(
response => {
console.log("SEND PDF:");
console.log(response);
},
error => {
console.log("error sendPDF:");
console.log(error);
});
}
这是 Chrome 控制台上的错误:
编辑:
这是我在PlayerController.php中的 php 函数:
public function ToPdf(Request $request) {
// Obtener usuario identificado
$token = $request->header('Authorization');
$jwtAuth = new \JwtAuth();
$checkToken = $jwtAuth->checkToken($token);
$user = $jwtAuth->checkToken($token, true);
$json = $request->input('json', null);
$params_array = json_decode($json, true);
$id_player = $params_array['idplayer'];
$player = Player::find($id_player);
$pdf = PDF::loadView('templatePdf', $player);
$pdf_name = $player->id . '.pdf';
$content = $pdf->output();
\Storage::disk('players')->put('/pdf/' . $pdf_name, $content);
$exists = \Storage::disk('player')->exists('/pdf/' . $pdf_name);
if (!$exists) {
$data = array(
'code' => 400,
'status' => 'error',
'message' => 'Error PDF.',
'pdf' => $pdf_name
);
}
else {
$email_params = array(
'userName' => $user->name,
'playerId' => $player->id,
'playerName' => $player->name,
'playerSurname' => $player->surname,
);
// Mail::to($user->email)->queue(new EmailPdf($email_params));
Mail::to($user->email)->queue(new EmailPdf($email_params));
\Storage::disk('players')->delete('/pdf/' . $pdf_name);
$data = array(
'code' => 200,
'status' => 'success',
'message' => 'Email sended successfully.',
);
}
return response()->json($data, $data['code']);
}
解决方案
for 的第二个参数PDF::loadView()
必须是一个数组。
尝试改变这一点
$pdf = PDF::loadView('templatePdf', $player);
进入
$pdf = PDF::loadView('templatePdf', ['player'=>$player]);
推荐阅读
- sql-server - VB6 - 如何在一次调用中执行多个 SQL 查询
- haskell - 如何将正确的 Cabal 规范与 Travis CI 构建中的每个解析器匹配?
- windows - 如何在PowerShell中添加异常以等待进程关闭命令?
- javascript - 需要另一个 JS 文件的主文件的 Gulp 简单连接
- .net - 以编程方式访问 Visual Studio 代码样式(颜色等)
- php - 如何将警报功能更改为引导模式
- c++ - 字符到整数数组
- ruby-on-rails - RubyXL:如何将多个数据单元格添加到工作表中?
- sql-server - 无法在 UPDATE 语句中插入值 NULL
- hyperledger-composer - 尝试调用业务网络时出错。缺少必填字段