PHP code example of jerowork / route-attribute-provider
1. Go to this page and download the library: Download jerowork/route-attribute-provider 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/ */
jerowork / route-attribute-provider example snippets
use Jerowork\RouteAttributeProvider\RouteAttributeConfigurator;
// ...
$routeConfigurator = new RouteAttributeConfigurator(
new CustomRouteProvider($router) // Implementation of your choice
);
$routeConfigurator
->addDirectory(sprintf('%s/src/Infrastructure/Api/Http/Action', __DIR__))
->configure();
// ...
use Jerowork\FileClassReflector\FileFinder\RegexIterator\RegexIteratorFileFinder;
use Jerowork\FileClassReflector\NikicParser\NikicParserClassReflectorFactory;
use Jerowork\RouteAttributeProvider\RouteAttributeConfigurator;
use Jerowork\RouteAttributeProvider\RouteLoader\ClassReflector\ClassReflectorRouteLoader;
use PhpParser\NodeTraverser;
use PhpParser\ParserFactory;
// ...
// All parts of the configurator can be replaced with a custom implementation
$routeConfigurator = new RouteAttributeConfigurator(
new CustomRouteProvider($router), // Implementation of your choice
new ClassReflectorRouteLoader(
new NikicParserClassReflectorFactory(
new RegexIteratorFileFinder(),
(new ParserFactory())->create(ParserFactory::PREFER_PHP7),
new NodeTraverser()
)
)
);
// Multiple directories can be defined
$routeConfigurator
->addDirectory(
sprintf('%s/src/Infrastructure/Api/Http/Action', __DIR__),
sprintf('%s/src/Other/Controller', __DIR__)
)
->configure();
// ...
use Jerowork\RouteAttributeProvider\Api\Route;
use Jerowork\RouteAttributeProvider\RouteAttributeProviderInterface;
final class CustomRouteProvider implements RouteAttributeProviderInterface
{
private SomeRouter $router;
public function __construct(SomeRouter $router)
{
$this->router = $router;
}
public function configure(string $className,string $methodName, Route $route) : void
{
// Register rule at your router
$rule = $this->router->addRule(
$route->getMethods(),
$route->getPattern(),
$className.':'.$methodName,
$route->getName()
);
// Register optional middleware
foreach ($route->getMiddleware() as $middleware) {
$rule->addMiddleware($middleware);
}
}
}
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Psr16Cache;
// ...
// Enable route attribute caching with any PSR-16 implementation (e.g. symfony/cache)
$routeConfigurator->enableCache(new Psr16Cache(new ApcuAdapter()));
// ...
use Jerowork\RouteAttributeProvider\Api\Route;
use Psr\Http\Message\ResponseInterface as ServerRequest;
use Psr\Http\Message\ServerRequestInterface as Response;
final class RootAction
{
#[Route('/root')]
public function __invoke(ServerRequest $request, Response $response) : Response
{
return $response;
}
}
use Jerowork\RouteAttributeProvider\Api\RequestMethod;
use Jerowork\RouteAttributeProvider\Api\Route;
use Psr\Http\Message\ResponseInterface as ServerRequest;
use Psr\Http\Message\ServerRequestInterface as Response;
final class RootAction
{
#[Route('/root', method: RequestMethod::GET, name: 'root', middleware: SomeMiddleware::class)]
public function __invoke(ServerRequest $request, Response $response) : Response
{
return $response;
}
}
use Jerowork\RouteAttributeProvider\Api\RequestMethod;
use Jerowork\RouteAttributeProvider\Api\Route;
use Psr\Http\Message\ResponseInterface as ServerRequest;
use Psr\Http\Message\ServerRequestInterface as Response;
final class RootAction
{
#[Route('/root',
method: [RequestMethod::GET, RequestMethod::POST],
name: 'root',
middleware: [
SomeMiddleware::class,
AnotherMiddleware::class,
],
host: 'localhost',
schemes: ['http', 'https'],
httpPort: 8888,
httpsPort: 9999,
options: ['strategy' => 'something']
)]
#[Route('/second-route',
method: RequestMethod::DELETE,
name: 'second-route'
)]
public function __invoke(ServerRequest $request, Response $response) : Response
{
return $response;
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.