1. Go to this page and download the library: Download mrcl/slim-routes 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/ */
mrcl / slim-routes example snippets
use Mrcl\SlimRoutes\Attribute\Controller;
#[Controller]
class UserController
{...}
use Mrcl\SlimRoutes\Attribute\Route;
#[Route('users/{id}')]
class ViewUserAction
{
public function __invoke
}
Routes:
-> GET /users/{id}
use Mrcl\SlimRoutes\Attribute\Controller;
use Mrcl\SlimRoutes\Attribute\Route;
use Mrcl\SlimRoutes\Routing\HttpMethod;
#[Controller('users')]
class UserController
{
#[Route('{id}')]
public function getUser
#[Route(method: HttpMethod::POST)]
public function addUser
}
Routes:
-> GET /users/{id}
-> POST /users
use Mrcl\SlimRoutes\SlimRoutes;
use Slim\Factory\AppFactory;
$app = AppFactory::create();
$sr = new SlimRoutes(
$app,
__DIR__ . '/../src'
);
$sr->registerRoutes();
#[Controller('users', [FirstMiddleware::class, SecondMiddleware::class])]
class UserController {
#[Route(middleware: [ThirdMiddleware::class, FourthMiddleware::class])]
public function getAllUsers
}
#[Controller('users')]
class UserController {
#[Route]
public function getAllUsers
#[Route('{id}')]
public function getUser
}
Routes:
-> GET /users
-> GET /users/{id}
use Mrcl\SlimRoutes\Routing\GroupConfiguration;
class Group
{
final public const ANIMALS = 'animals';
final public const CATS = 'cats';
final public const ELEPHANTS = 'elephants';
private array $groups;
public function __construct()
{
$this->groups = [
self::ANIMALS => ($animals = new GroupConfiguration(id: self::ANIMALS, pattern: 'animals', middleware: AnimalsMiddleware::class)),
self::ELEPHANTS => new GroupConfiguration(id: self::ELEPHANTS, pattern: 'elephants', middleware: ElephantsMiddleware::class, parent: $animals),
self::CATS => new GroupConfiguration(id: self::CATS, pattern: 'cats', middleware: CatsMiddleware::class, parent: $animals)
];
}
public function get(string $id): GroupConfiguration
{
return $this->groups[$id];
}
}
$sr
//->addGroup(Group->get(Group::ANIMALS)) you only need to add a group if you use it directly
->addGroup(Group->get(Group::CATS))
->addGroup(Group->get(Group::ELEPHANTS))
#[Controller(groupId: Group::CATS)]
class CatsController {
#[Route]
public function getAllCats
#[Route('{id}')]
public function getCat
}
Routes:
-> GET /animals/cats [AnimalsMiddleware, CatsMiddleware]
-> GET /animals/cats/{id} [AnimalsMiddleware, CatsMiddleware]
#[Route(method: HttpMethod::POST, groupId: Group::ELEPHANTS)]
class AddElephantAction
{
public function __invoke
}
Routes:
-> POST /animals/elephants [AnimalsMiddleware, ElephantsMiddleware]
#[Controller(groupId: 'cats')]
class CatController {
#[Route]
public function getAllCats
#[Route(
pattern: 'all',
groupId: 'cats-v1',
version: 'v1'
)]
public function getAllCatsV1
}
Routes:
-> GET /v3/cats [ApiMiddleware, OtherApiMiddleware, CatsMiddleware]
-> GET /v2/cats [ApiV2Middleware, CatsMiddleware]
-> GET /v1/cats/all [ApiV1Middleware]
#[Route(groupId: 'cats')]
class ViewCatsAction {
public function __invoke
}
#[Route(
pattern: 'all',
groupId: 'cats-v1',
version: 'v1'
)]
class ViewCatsActionV1 {
public function __invoke
}
#[Route(
pattern: 'my-action',
version: VersionConfiguration::NONE
)]
class MyAction
{
public function __invoke
}