Список всех разрешений с добавлением поля is_checked к ресурсу - PullRequest
0 голосов
/ 24 февраля 2020

В Laravel 6 с "spatie / laravel -permission": "^ 3.5" Я делаю список всех разрешений с добавочным полем is_checked равным true, если у пользователя есть это разрешение:

$permissions = $user->permissions->all();

$userPermissionLabels= Permission
    ::get()
    ->map(function ($item) use($permissions) {
        $is_checked= 0;
        foreach( $permissions as $nextPermission ) {
            if($nextPermission->id == $item->id) {
                $is_checked= 1;
                break;
            }
        }
        return [ 'id'=> $item->id, 'name'=> $item->name, 'is_checked' => $is_checked];
    })
    ->all();

\Log::info(' ModelHasPermissionsController INDEX $userPermissionLabels');
\Log::info(json_encode($userPermissionLabels));

return (new PermissionCollection($userPermissionLabels));

У меня есть действительный массив $ userPermissionLabels, но у меня проблема с определениями ресурсов:

app / Http / Resources / PermissionCollection. php:

<?php

namespace App\Http\Resources;

use App\library\MyFuncsClass;
use Illuminate\Http\Resources\Json\ResourceCollection;
use tests\Mockery\Adapter\Phpunit\EmptyTestCase;

class PermissionCollection extends ResourceCollection
{

    public static $wrap = 'permissions';

    public function toArray($request)
    {

        $this->collection->transform(function ($permission) {
            \Log::info(' +++PermissionCollection $permission');
            \Log::info(json_encode($permission));
            // I see rows like ‘{"id":1,"name":"App admin","is_checked":0}  ’

            return new PermissionResource($permission);
        });

        return parent::toArray($request);
    }

    public function with($request)
    {
        return [
            'meta' => [
                'version'=>MyFuncsClass::getAppVersion()
            ]
        ];
    }
}

и app / Http / Resources / PermissionResource . php:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class PermissionResource extends JsonResource
{

    public static $wrap = 'permissions';

    public function toArray($request)
    {
        \Log::info(' PermissionResource $request');
        \Log::info(json_encode($request));  // NO DATA ARE LOGGED

        \Log::info(' PermissionResource $this');
        \Log::info(json_encode($this));;  // NO DATA ARE LOGGED

        return [
            'id' => $this->id, // AND THAT RAISE ERROR
            'name' => $this->name,
            'is_checked' => $this->is_checked ?? null,
            'guard_name' => $this->guard_name ?? null,
            'created_at' => $this->created_at ?? null,
        ];

//        return parent::toArray($request);
    }
}

Я полагаю, что я должен отправить данные в свой контроль каким-либо другим способом. Как?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...