首页 > 解决方案 > 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']);

    }

标签: phplaravel

解决方案


for 的第二个参数PDF::loadView()必须是一个数组。

尝试改变这一点

$pdf = PDF::loadView('templatePdf', $player);

进入

$pdf = PDF::loadView('templatePdf', ['player'=>$player]);

推荐阅读