LaravelPackages.net
Acme Inc.
Toggle sidebar
foothing/laravel-repository-controller

Resources controller with Eloquent Laravel Repository implementation.

133
2
0.2.0
About foothing/laravel-repository-controller

foothing/laravel-repository-controller is a Laravel package for resources controller with eloquent laravel repository implementation.. It currently has 2 GitHub stars and 133 downloads on Packagist (latest version 0.2.0). Install it with composer require foothing/laravel-repository-controller. Discover more Laravel packages by foothing or browse all Laravel packages to compare alternatives.

Last updated

Laravel Repository Controller

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.

|VERB|Url|Notes| |----|---|-----| |GET|[optionalPrefix]/resources/{resource}/{id?}/{args?}|Read resources| |POST|[optionalPrefix]/resources/{resource}|Create resources| |PUT|[optionalPrefix]/resources/{resource}/{id}|Update resources| |DELETE|[optionalPrefix]/resources/{resource}/{id}|Delete resources| |PUT|resources/{resource}/{id?}/link/{relation}/{related}/{relatedId}|Attach many-to-many| |DELETE|resources/{resource}/{id?}/link/{relation}/{related}/{relatedId}|Detach many-to-many| |POST|resources/bulk/{resource}|Bulk create resources| |PUT|resources/bulk/{resource}|Bulk update resources|

Each api endpoint will return data in JSON format.

Read resources

|Verb|Url|Payload| |----|---|-------| |GET |[optionalPrefix]/resources/{resource}/{id?}/{args?}| none|

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.

|Verb|Url|Payload| |----|---|-------| |POST |[optionalPrefix]/resources/{resource}| {resourceData}|

Example

POST api/v1/resources/user

POST payload

{
	name: 'foo',
	email: '[email protected]'
}

HTTP Response

{
	id: 1,
	name: 'foo',
	email: '[email protected]'
}

Update resources

Update the requested resource.

|Verb|Url|Payload| |----|---|-------| |PUT |[optionalPrefix]/resources/{resource}/{id}| {resourceData}|

Example

PUT api/v1/resources/user/1

PUT payload

{
	id: 1,
	name: 'updating name',
	email: '[email protected]'
}

HTTP Response

{
	id: 1,
	name: 'updating name',
	email: '[email protected]'
}

Delete resources

Delete the requested resource.

|Verb|Url|Payload| |----|---|-------| |DELETE |[optionalPrefix]/resources/{resource}/{id}| none|

Example

DELETE api/v1/resources/user/1

More info coming soon.

LICENSE

MIT

Comments