Laravel为同一个Resource实例提供了许多不同的请求

时间:2018-01-29 13:08:16

标签: laravel

我正在使用Laravel Resource作为发送API数据的工具。但是,当我使用CRUD方法制作一个基本控制器时 - 所有方法都不同,例如

public function show(Offer $offer)
{
    return $offer;
}

public function index()
{
    return Offer::orderBy('created_at','desc')->get();
}

所以我创建了OfferResource,对于show方法,它是:

return new OfferResource($offer);


class OfferResource extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {

        return [
            'id' => $this->id,
            'body' => $this->body,
            'title' => $this->title,
            'specialities' => $this->specialities()->pluck('speciality_id'),
            'specialities_name' => $this->specialities()->pluck('name')
        ];
    }
}

我应该如何为方法索引()调用OfferResource? 我应该创建另一个资源“控制器”吗?或者是否有不同的方法来使用相同的OfferResource?

1 个答案:

答案 0 :(得分:1)

您可以使用collection()方法将此资源用于索引 -

return OfferResource::collection(Offer::orderBy('created_at','desc')->get());

如果您可以使用而不是为multiple purpose创建new,则最好使用each purpose资源。

我们都知道代码re-use的概念,OOP的基本基础,我们想写ones但是使用multiple次。这就是我们在需要Resource我们的数据以预定义格式将数据发送到数组时编写transform类的原因。并且要求总是change,因此使用resource来跟上变化会更好。

resource类代表single模型,需要transformed成为JSON结构。

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

Laravel也provide使用此方法使用collection of resources方法转换collection()的方法。