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)
)