首页 > 解决方案 > 通过 Controller Larael 中的 Trait 触发 JSON 响应

问题描述

我正在使用 Laravel 8 构建一个 API,我有一条路线,出于问题的目的,它是....../api/fact它获取了一个随机事实。我有一个FactsController.php文件和两个特征,一个用于构建 JSON 响应,另一个用于获取事实。由于某种原因,当从我的控制器(发出请求)中调用特征函数时,我没有在 Postman 中返回任何返回的 JSON ......

特征/GetFact.php

<?php

namespace App\Traits;

use App\Traits\ApiResponse;

trait GetFact {

    use ApiResponse;

    /**
     * Get random fact
     *
     * get random fact
     */
    public function getRandomFact () {
      $this->getFact();
      
      $this->apiResponse([
        'msg' => "Fact..."
      ], 200, true);
    }
}

特征/ApiResponse.php

<?php

namespace App\Traits;

trait ApiResponse {

    /**
     * API Response
     *
     * Return a JSON response for our API with params
     */
    public function apiResponse ($data, $code, $success = false) {
      return response()->json(array_merge(['success' => $success], $data), $code);
    }

}

控制器/FactController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Traits\GetFact;

class FactsController extends Controller
{
    use GetFact;

    /**
     * Fact
     *
     * @param  Request  $request
     */
    public function fact()
    {
        $this->getRandomFact()
    }

}

当我向我提出请求时,/api/fact我应该在我使用 调用的位置列出返回的 JSON $this->apiResponse()msg但我不是?这就像return似乎没有返回 JSON,因为它的范围是 trait 而不是控制器,并且那里没有返回?我怎样才能实现上市。

标签: laraveltraitslaravel-8

解决方案


您不会从 Controller 方法中“返回”任何内容。你必须返回一些东西,让他们成为内容的回应。另外,fact不要getRandomFact返回任何东西,所以调用它们对你没有任何作用。您还调用了一个getFact方法并且没有将返回分配给任何东西(如果它甚至返回任何东西)。


推荐阅读