如何在 laravel 5.5 中将数组作为 API 资源返回



我希望(出于项目原因(在类控制器中创建一个数组并将其传递给资源。在我的控制器类中考虑此方法:

public function getExample(){
  $attribute=array('otherInfo'=>'info');
  return new ExampleResource($attribute);
}

在我的课堂上,我会写像示例资源这样的内容:

public function toArray($request){
return[
'info' => $this->info
];
}

如何转换值$attribute以return new ExampleResource($attribute);执行此操作?

请不要建议我在模型中插入字段信息,此属性只能来自外部,来自控制器,不属于数据库中的模型。

class ExampleResource extends Resource
{
    private $info;
    /**
     * 
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
     public function __construct($info)
     {
         $this->$info = $info;
     }

    public function toArray($request)
    {
        return[
          'info'=>$this->$info,
          'id' => $this->id
          ];
          }
        }

将构造函数添加到资源类:

public function __construct($resource, $attribute)
{
    $this->resource = $resource;
    $this->attribute = $attribute;
}

然后在toArray()

return [
    'info' => $this->attribute,
    'created' => $this->created_at
];

并使用它:

return new ExampleResource(Model::find($id), $attribute);
资源旨在

用于轻松地将模型转换为 JSON。

看看这个例子:

use AppUser;
use AppHttpResourcesUserResource;
Route::get('/user', function () {
    return new UserResource(User::find(1));
});

你只想返回一个数据数组,所以你应该只返回数组,它会自动变成 JSON:

Route::get('/info', function () {
    return ['info' => 'info ...'];
});

有关更多信息,请查看此处的文档

最新更新