PHP code example of jcfrane / laravel-resource-scope
1. Go to this page and download the library: Download jcfrane/laravel-resource-scope library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jcfrane / laravel-resource-scope example snippets
use JCFrane\ResourceScope\Concerns\HasResourceScope;
class UserResource extends JsonResource
{
use HasResourceScope;
protected function scopeDefinitions(): array
{
return [
'listing' => ['id', 'name', 'email', 'avatar'],
'detail' => ['id', 'name', 'email', 'avatar', 'bio', 'created_at', 'settings'],
];
}
public function toArray(Request $request): array
{
return $this->scoped([
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'avatar' => $this->avatar_url,
'bio' => $this->bio,
'created_at' => $this->created_at,
'settings' => $this->whenLoaded('settings'),
]);
}
}
->withMiddleware(function (Middleware $middleware) {
$middleware->api(append: [
\JCFrane\ResourceScope\Middleware\SetResourceScope::class,
]);
})
Route::middleware('resource.scope')->group(function () {
Route::apiResource('users', UserController::class);
});
protected function scopeDefinitions(): array
{
return [
'listing' => ['id', 'name', 'email'],
'detail' => ['id', 'name', 'email', 'bio', 'skills', 'documents'],
];
}
use JCFrane\ResourceScope\Attributes\ResourceScope;
#[ResourceScope('listing', fields: ['id', 'name', 'email'])]
#[ResourceScope('detail', fields: ['id', 'name', 'email', 'bio', 'skills', 'documents'])]
class UserResource extends JsonResource
{
use HasResourceScope;
public function toArray(Request $request): array
{
return $this->scoped([
// ...
]);
}
}
class PostResource extends JsonResource
{
use HasResourceScope;
protected function scopeDefinitions(): array
{
return [
'listing' => ['id', 'title', 'author', 'created_at'],
];
}
protected function scopeMappings(): array
{
return [
'listing' => [
UserResource::class => 'summary',
],
];
}
public function toArray(Request $request): array
{
return $this->scoped([
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
'author' => new UserResource($this->whenLoaded('author')),
'created_at' => $this->created_at,
]);
}
}
use JCFrane\ResourceScope\Attributes\ResourceScope;
#[ResourceScope('listing', fields: ['id', 'title', 'author', 'created_at'], mappings: [
UserResource::class => 'summary',
])]
#[ResourceScope('detail', fields: ['id', 'title', 'body', 'author', 'created_at'])]
class PostResource extends JsonResource
{
use HasResourceScope;
public function toArray(Request $request): array
{
return $this->scoped([
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
'author' => new UserResource($this->whenLoaded('author')),
'created_at' => $this->created_at,
]);
}
}
return $this->scoped([
'id' => $this->id,
'name' => $this->name,
'documents' => DocumentResource::collection($this->whenLoaded('documents')),
'is_admin' => $this->when($user->isAdmin(), true),
]);
return [
// Query parameter name (default: 'scope')
'query_param' => 'scope',
// HTTP header name (default: 'X-Resource-Scope')
'header' => 'X-Resource-Scope',
// Query param takes priority over header (default: true)
'query_param_priority' => true,
];
bash
php artisan vendor:publish --tag=resource-scope-config