foothing / laravel-repository-controller
Resources controller with Eloquent Laravel Repository implementation.
Requires
- php: >=5.5.0
- foothing/laravel-repository: >=0.8.0
- illuminate/routing: ~5.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.0
- phpunit/phpunit: 4.8.*
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 yourroutes.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 usersGET api/v1/resources/user/15
: will return user with id = 15GET 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