foothing / laravel-repository-controller by brazorf

Resources controller with Eloquent Laravel Repository implementation.
131
2
3
Package Data
Maintainer Username: brazorf
Maintainer Contact: fabrizio.ranieri@gmail.com (brazorf)
Package Create Date: 2016-07-05
Package Last Update: 2021-06-30
Home Page:
Language: PHP
License: MIT
Last Refreshed: 2024-04-29 15:04:04
Package Statistics
Total Downloads: 131
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 2
Total Watchers: 3
Total Forks: 1
Total Open Issues: 0

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.

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: 'foo@bar.baz'
}

HTTP Response

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

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: 'foo@bar.baz'
}

HTTP Response

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

Delete resources

Delete the requested resource.

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

Example

DELETE api/v1/resources/user/1

Link, bulk create and bulk update

More info coming soon.

LICENSE

MIT