v.1.1.0 Add $app->any() and $app->match() methods (no breaking changes)
Extends a lumen application for using nested route groups. Lumen already uses a group in bootstrap/app.php, that is why you can't use another groups in app/Http/routes.php. This lib removes the restriction.
composer require "fremail/lumen-nested-route-groups:~1.1"
Change initialization of Lumen Application class to initialization of Lumen Nested Route Groups Application class in bootstrap/app.php.
Before:
$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);
After:
$app = new Fremail\NestedRouteGroups\Application(
realpath(__DIR__.'/../')
);
By default this lib uses nested namespace (Laravel style), but you can determine to use full namespaces instead (Lumen style).
Steps for using full namespaces:
-
Create
config
directory if you don't have one in the project root. -
Copy
NestedRouteGroups.php
fromvendor/fremail/lumen-nested-route-groups/config
folder to the createdconfig
dir in the root. -
Open the
config/NestedRouteGroups.php
file and set 'namespace' value to 'full'. -
Add this line to your bootstrap/app.php:
$app->configure('NestedRouteGroups');
Do you like any()
and match()
methods on Laravel? I love them! That's why I added supporting them on Lumen.
The syntax is the same as for Laravel:
$app->match($methods, $uri, $action);
Where
$methods - an array of methods. Example: ['get', 'post', 'delete']
. $uri and $action are the same as on other methods
$app->any($uri, $action);
Here are $uri and $method are the same as on other methods like $app->get(...)
etc.
This is an example of app/Http/routes.php
$app->group(['middleware' => 'auth'], function () use ($app) {
$app->get('test', function () {
echo "Hello world!";
});
$app->group(['prefix' => 'user'], function () use ($app) {
$app->get('{id}', 'UserController@show');
$app->post('/', 'UserController@store');
$app->delete('{id}', 'UserController@destroy');
});
/**
* only admins
*/
$app->group(['middleware' => 'admin'], function () use ($app) {
$app->group(['prefix' => 'admin'], function () use ($app) {
$app->get('/', 'AdminController@index');
});
});
/**
* $app->any and $app->match available from v1.1.0
*/
$app->any('/', function () use ($app) {
echo "Hey! I don't care it's POST, GET, PATCH or another method. I'll answer on any of them :)";
});
$app->match(['PATCH', 'PUT', 'DELETE'], '/old/', function () use ($app) {
echo "This is an old part of our site without supporting REST. Please use only GET and POST here.";
});
});