Resources

Introduction

Resources are a quick way to define endpoint collections. A Resource reduces the amount of boilerplate code needed to output standard data responses.

use Prest\Api;
use Acme\Acl\Roles;
use Prest\Api\Resource;
use Prest\Api\Endpoint;
use Acme\Model\BookModel;
use Acme\Controller\BookController;
use Acme\Transformer\BookTransformer;

$api = new Api();

$api->resource(Resource::factory('/books')
    ->name('Book')
    ->handler(BookController::class)
    ->model(BookModel::class)
    ->expectsJsonData()
    ->transformer(BookTransformer::class)
    ->singleKey('book')
    ->multipleKey('books')
    ->deny(Roles::UNAUTHORIZED)
    ->endpoint(Endpoint::get('/featured', 'featured'))
    ->endpoint(Endpoint::get('/sold', 'sold'));
);

Extend

Extend from BookResource from Prest\Api\Resource:

namespace Acme\Resource;

use Acme\Acl\Roles;
use Prest\Api\Resource;
use Acme\Model\BookModel;
use Acme\Controller\BookController;
use Acme\Transformer\BookTransformer;

class BookResource extends Resource
{
    protected function initialize()
    {
        $this
            ->name('Book')
            ->handler(BookController::class)
            ->model(BookModel::class)
            ->expectsJsonData()
            ->transformer(BookTransformer::class)
            ->singleKey('book')
            ->multipleKey('books')
            ->deny(Roles::UNAUTHORIZED)
            ->endpoint(Endpoint::get('/featured', 'featured'))
            ->endpoint(Endpoint::get('/sold', 'sold'));
    }
}

Out of the box CRUD

The Resource::crud factory method will create an instance of the resource with the endpoints all, find, create, update and remove attached to it. This makes CRUD operations work out of the box.

use Prest\Api;
use Acme\Acl\Roles;
use Prest\Api\Resource;
use Prest\Api\Resource;
use Acme\Model\AlbumModel;
use Acme\Transformer\AlbumTransformer;

$api = new Api();

$api->resource(Resource::crud('/albums', 'Album')
    ->model(AlbumModel::class)
    ->expectsJsonData()
    ->transformer(AlbumTransformer::class)
    ->singleKey('album')
    ->multipleKey('albums')
    ->deny(Roles::UNAUTHORIZED)
)

results matching ""

    No results matching ""