Ресурсы
Призмы
Глобальные фильтры и преобразования для ресурсов
Призма — мощный механизм для определения глобальных фильтров и преобразований, которые применяются ко всем операциям ресурса на стороне сервера.
Если сам ресурс определяет, что доступно (CRUD-операции, поля, интерфейсы), то призма определяет, какая часть этих данных и в каком виде будет видна для текущего запроса.
Проще говоря, призма — это прослойка между запросом к API и конечной операцией с моделью Eloquent. Например, можно ограничить список записей по роли пользователя или скрыть определённые поля.
Создание
php artisan frame:lens UserLens
Чтобы подключить призму, укажите её в методе lenses() ресурса:
public function lenses(FrameRequest $request): array
{
return [
YouLens::class,
];
}
Чтобы сохранить предустановленные фильтры и добавить свой:
public function lenses(FrameRequest $request): array
{
return [
...parent::lenses($request),
YouLens::class,
];
}
Доступные методы
title
→ string
Переопределяет название призмы в интерфейсе.
query
→ Builder|Relation
Переопределяет или модифицирует начальный Eloquent-запрос, используемый как основа для всех операций ресурса. Точка входа для сложных условий, соединений (joins), eager loading и кастомной логики.
fields
FrameRequest $request → array
Определяет поля, отображаемые при использовании призмы. Если не переопределён — используются поля ресурса.
actions
FrameRequest $request → Actions
Определяет действия, доступные для записей через призму (экспорт, публикация и др.). Возвращает объект
Frame\Laravel\Options\Actions. Список действий берётся из ресурса.title()
public static function title(): string
{
return 'Озера';
}

query()
public function query(): Builder|Relation
{
return parent::query()->where('type', 'lake');
}

fields()
public function fields(FrameRequest $request): array
{
return [
ID::make('ID'),
Text::make('title', 'Title')
->required(),
Radio::make('type', 'Type')
->options(['park', 'lake']),
];
}
