PHP code example of tanahiro2010 / slim-router-dsl

1. Go to this page and download the library: Download tanahiro2010/slim-router-dsl library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

tanahiro2010 / slim-router-dsl example snippets


$routes = new Routes([
    Route::group('/api', [
        Route::middleware(AuthMiddleware::class, [
            Route::get('/users', [UserController::class, 'index']),
            Route::get('/users/{id}', [UserController::class, 'show']),
            Route::post('/users', [UserController::class, 'create']),
        ]),
    ]),
]);

$routes->deploy($app);

$app->group('/api', function (RouteCollectorProxy $group) {
    $group->get('/users', [UserController::class, 'index']);
})->add(AuthMiddleware::class);

Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'create']);
Route::put('/users/{id}', [UserController::class, 'update']);
Route::patch('/users/{id}', [UserController::class, 'patch']);
Route::delete('/users/{id}', [UserController::class, 'delete']);
Route::options('/users', [UserController::class, 'options']);

// 任意のHTTP Methodを指定
Route::map(['GET', 'HEAD'], '/resource', ResourceController::class);

// 主要HTTP Methodをまとめて登録
Route::any('/health', HealthController::class);

// HEAD
Route::head('/users', [UserController::class, 'index']);

Route::group('/api', [
    Route::get('/users', ...),
    Route::group('/v1', [
        Route::get('/posts', ...),
    ]),
]);

// 単一Middleware
Route::middleware(AuthMiddleware::class, [
    Route::get('/me', ...),
]);

// 複数Middleware(配列形式)
Route::middleware([AuthMiddleware::class, JsonMiddleware::class], [
    Route::get('/me', ...),
]);

// 複数Middleware(ネスト形式)
Route::middleware(AuthMiddleware::class, [
    Route::middleware(JsonMiddleware::class, [
        Route::get('/me', ...),
    ]),
]);

Route::get('/me', [UserController::class, 'me'])
    ->middleware(AuthMiddleware::class)
    ->name('users.me');

Route::get('/users/{id}', [UserController::class, 'show'])
    ->name('users.show')
    ->meta([
        'summary' => 'ユーザー取得',
        'auth' => true,
        'permission' => 'users.read',
    ]);

// authが必要なRouteだけ抽出
$routes->filter(fn (CompiledRoute $route) => $route->metadata['auth'] ?? false);

echo $routes->dump();

$routes->toArray();

[
    [
        'methods' => ['GET'],
        'path' => '/api/users',
        'handler' => [UserController::class, 'index'],
        'middleware' => [AuthMiddleware::class],
        'name' => null,
        'metadata' => [],
    ],
    // ...
];

$routes->findByName('users.show');      // ?CompiledRoute
$routes->filterByMethod('POST');        // CompiledRoute[]
$routes->findByPath('/api/users');      // CompiledRoute[](同一pathに複数methodがあり得るため配列)
$routes->filterByMiddleware(AuthMiddleware::class); // CompiledRoute[]

$routes->validate();

Route::resource('/users', UserController::class);

Route::resource('/users', UserController::class, only: ['index', 'show']);
Route::resource('/users', UserController::class, except: ['delete']);

Route::controller(UserController::class, [
    Route::get('/', 'index'),
    Route::get('/{id}', 'show'),
    Route::post('/', 'create'),
]);

$routes = new Routes([...]);

$routes->deploy($app);

// routes.php


imRouterDsl\Route;
use Tanahiro2010\SlimRouterDsl\Routes;

return new Routes([
    Route::get('/', HomeController::class),
    // ...
]);
bash
vendor/bin/router-dsl routes --bootstrap=routes.php
vendor/bin/router-dsl routes --bootstrap=routes.php --json
vendor/bin/router-dsl routes --bootstrap=routes.php --method=POST
vendor/bin/router-dsl routes --bootstrap=routes.php --name=users.show
vendor/bin/router-dsl validate --bootstrap=routes.php