foothing/laravel-repository-controller

Resources controller with Eloquent Laravel Repository implementation.

0.2.0 2016-07-28 17:46 UTC

This package is auto-updated.

Last update: 2024-10-29 03:53:33 UTC


README

Easily open an HTTP api over your Laravel database.

Setup

Install with composer:

composer require foothing/laravel-repository-controller

This package will define several routes in a REST-like format that will perform operations on your database.

Add the service provider in config/app.php:

	"providers" => [

		Foothing\RepositoryController\RepositoryControllerServiceProvider::class,

	],

In order to enable the routes, you'll need to declare them in your routes.php:

	// ... your app routes

	RouteInstaller::install('api/v1/');

Be careful and place the RouteInstaller::install() method at the very end of your routes.php in order to avoid conflicts.

IMPORTANT: you will need to change the default Controllers namespace in RouteServiceProvider like so: protected $namespace = '';

Finally, configure your resources in the config file.

php artisan vendor:publish --provider="Foothing\RepositoryController\RepositoryControllerServiceProvider" --tag="config"

This will add the resources.php file in your config folder.

'resources' => array(

	// Resources must be in the form 'resourceName' => 'resourceImplementation'
	// The implementation should be a fully qualified namespace to the model.

	'user' => 'App\User',
	'foo'  => 'My\Namespace\Foo',
),

This will enable the routes on the specified resources.

How to use

The RouteInstaller will declare the package routes. You can specify a prefix as an optional install() argument. The process will enable the following routes, which we'll describe in better details later.

Each api endpoint will return data in JSON format.

Read resources

Examples

  • GET api/v1/resources/user: will return all users
  • GET api/v1/resources/user/15: will return user with id = 15
  • GET api/v1/resources/user/15/roles will return user 15 roles

Pagination

This endpoint will handle 2 querystring args for pagination:

  • page (pagination page)
  • ipp (pagination items-per-page)

The result will be a Laravel paginated result like:

{
	"total":4,
	"per_page":"25",
	"current_page":1,
	"last_page":1,
	"next_page_url":null,
	"prev_page_url":null,
	"from":1,
	"to":4,
	"data":[ the resources array ]
}

Related resources

You can pass an optional with query string argument that will be used to fetch relations within the requested resource:

GET api/v1/resources/user/1?with=roles,posts

Auto eager loading relations

Since this package relies on Laravel Repository you can take advantage of that package eager loading features therefore enabling auto eager-load features on each resource.

Create resources

Create the requested resource.

Example

POST api/v1/resources/user

POST payload

{
	name: 'foo',
	email: 'foo@bar.baz'
}

HTTP Response

{
	id: 1,
	name: 'foo',
	email: 'foo@bar.baz'
}

Update resources

Update the requested resource.

Example

PUT api/v1/resources/user/1

PUT payload

{
	id: 1,
	name: 'updating name',
	email: 'foo@bar.baz'
}

HTTP Response

{
	id: 1,
	name: 'updating name',
	email: 'foo@bar.baz'
}

Delete resources

Delete the requested resource.

Example

DELETE api/v1/resources/user/1

Link, bulk create and bulk update

More info coming soon.

LICENSE

MIT