Hello everyone!✌
Now we are going to discuss about creating Route Wrapper Class in Slim Php Framework.
We have to follow few steps to creating route class and I hope you to enjoy it. It makes life easier for slim developer.
STEP 1: Creating Route Wrapper Class
Creating a new php file in App\Core\Route.php in your slim project directory. I have named Route.php.
<?php
namespace App;
use Slim\App;
class Router
{
protected $app;
public function __construct(App $app)
{
$this->app = $app;
}
public function get($pattern, $callable)
{
$this->app->get($pattern, $callable);
}
public function post($pattern, $callable)
{
$this->app->post($pattern, $callable);
}
public function put($pattern, $callable)
{
$this->app->put($pattern, $callable);
}
public function delete($pattern, $callable)
{
$this->app->delete($pattern, $callable);
}
public function patch($pattern, $callable)
{
$this->app->patch($pattern, $callable);
}
public function group($pattern, $callable)
{
$this->app->group($pattern, $callable);
}
public function middleware($middleware)
{
$this->app->add($middleware);
}
public function controller($pattern, $controller)
{
$this->app->any($pattern . '[/{action}]', function ($request, $response, $args) use ($controller) {
$action = $args['action'] ?? 'index';
$controllerInstance = new $controller();
return $controllerInstance->$action($request, $response, $args);
});
}
public function resource($pattern, $controller)
{
$this->app->get($pattern, $controller . ':index');
$this->app->get($pattern . '/create', $controller . ':create');
$this->app->post($pattern, $controller . ':store');
$this->app->get($pattern . '/{id}', $controller . ':show');
$this->app->get($pattern . '/{id}/edit', $controller . ':edit');
$this->app->put($pattern . '/{id}', $controller . ':update');
$this->app->delete($pattern . '/{id}', $controller . ':destroy');
}
}
STEP 2: Use Above Route Class in index.php
<?php
use Slim\Factory\AppFactory;
use App\Router;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$router = new Router($app);
// Define your routes
$router->get('/home', function ($request, $response, $args) {
$response->getBody()->write('Hello, Home!');
return $response;
});
$router->post('/submit', function ($request, $response, $args) {
// handle post request
return $response;
});
// Grouped routes
$router->group('/api', function () use ($router) {
$router->get('/users', function ($request, $response, $args) {
$response->getBody()->write('List of users');
return $response;
});
$router->post('/users', function ($request, $response, $args) {
// handle post request
return $response;
});
});
// Controller route
$router->controller('/product', \App\Controllers\ProductController::class);
// Resource route
$router->resource('/articles', \App\Controllers\ArticleController::class);
$app->run();
Thanks for giving your time and considerations!✨
Top comments (2)
Because the router is a part of the App class you could extend that, instead of creating Router class where you need to add all the router functionality.
src/MyAppFactory.php
src/MyApp.php
public/index.php
😊👍