簡體   English   中英

在Laravel資源集合中過濾屬性

[英]Filter attributes in Laravel Resource Collection

在新的Laravel Resource類中,您可以根據自己喜歡的任何內容刪除屬性。

如果要返回許多項目,可以使用該功能

Resource::collection()

但這不允許您在一個地方添加元數據。 輸入一個集合,很棒,這是一個很好的格式的項目,能夠添加元數據。 但你不能做的是過濾你必須隱藏屬性的集合,就像你可以用資源一樣。 我能看到的唯一方法是

foreach ($this->collection as $item) {
        if ($notAdmin) {
            $temp = array_except($item->toArray(), ['secret']);
        }
        $temp['links'] = ['self' => route('restaurant.show', [$item])];
        $data[] = $temp;
    }

有什么我想念的嗎? 這似乎是資源收集的一個巨大的被忽視的能力

基於線程,似乎在使用ResourceCollection類來自定義集合時(例如BookCollection ),Laravel會查找名為相同但沒有Collection sufix類的Resource類(在示例中,名為Just Book的類)。

因此,您需要有一個名為的BookBook ,您可以自定義要返回到響應的屬性,以及一個名為BookCollection的集合類,它將使用Book定義數據,並且還可以自定義元數據。

應用程序/ HTTP /資源/ book.php中

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Book extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
        ];
    }
}

應用程序/ HTTP /資源/ BookCollection.php

<?php

namespace App\Http\Resources\Users;

use Illuminate\Http\Resources\Json\ResourceCollection;

class BookCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return $this->collection;
    }

    public function with($request)    
    {
        return [
            'meta' => [
                'key' => 'value',
            ],
        ];
    }
}

好的,這是你如何做到的:

  1. 創建Resource對於單個資源,在這里你可以輕松擁有條件屬性

  2. 為集合創建RCollection ,您可以在其中添加元數據

  3. Resource::collection(Model::all)傳遞給new RCollection()

像這樣的東西(來自我的測試):

Route::get('users/all', function() {
    return new \App\Http\Resources\Users(
        \App\Http\Resources\UserResource::collection(\App\User::get())
    );
});

奇跡般有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM