1. Go to this page and download the library: Download inroutephp/inroute 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/ */
inroutephp / inroute example snippets
use inroutephp\inroute\Annotations\BasePath;
use inroutephp\inroute\Annotations\GET;
use inroutephp\inroute\Runtime\EnvironmentInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Laminas\Diactoros\Response\TextResponse;
/**
* @BasePath(path="/users")
*/
class UserController
{
/**
* @GET(
* path="/{name}",
* name="getUser",
* attributes={
* "key": "value",
* "name": "overwritten by path value"
* }
* )
*/
function getUser(
ServerRequestInterface $request,
EnvironmentInterface $environment
): ResponseInterface {
return new TextResponse(
// the name attribute from the request path
$request->getAttribute('name')
// the custom route attribute
. $request->getAttribute('key')
);
}
}
use inroutephp\inroute\Annotations\Pipe;
class PipedController
{
/**
* @GET(path="/piped")
* @Pipe(middlewares={"AppendingMiddleware"})
*/
function pipedAction(
ServerRequestInterface $request,
EnvironmentInterface $environment
): ResponseInterface {
return new TextResponse('Controller');
}
}
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class AppendingMiddleware implements MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface {
$response = $handler->handle($request);
return new TextResponse(
$response->getBody()->getContents() . "::Middleware"
);
}
}
use inroutephp\inroute\Compiler\CompilerFacade;
use inroutephp\inroute\Compiler\Settings\ArraySettings;
$settings = new ArraySettings([
'source-classes' => [
UserController::CLASS,
PipedController::CLASS,
],
'target-namespace' => 'example',
'target-classname' => 'HttpRouter',
]);
$facade = new CompilerFacade;
$code = $facade->compileProject($settings);
eval($code);
$router = new example\HttpRouter;
use inroutephp\inroute\Runtime\Middleware\Pipeline;
use Laminas\Diactoros\ServerRequestFactory;
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
// create a simple middleware pipeline for the entire application
$pipeline = new Pipeline($router);
// create a psr-7 compliant response emitter
$emitter = new SapiEmitter;
// fakeing a GET request
$request = (new ServerRequestFactory)->createServerRequest('GET', '/users/foo');
// in the real worl you would of course use
// $request = ServerRequestFactory::fromGlobals();
// create the response
$response = $pipeline->handle($request);
// send it
$emitter->emit($response);
use inroutephp\inroute\Runtime\Middleware\Pipeline;
use Laminas\Diactoros\ServerRequestFactory;
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
(new SapiEmitter)->emit(
(new Pipeline($router))->handle(
(new ServerRequestFactory)->createServerRequest('GET', '/piped')
)
);
function getUser(ServerRequestInterface $request, EnvironmentInterface $environment): ResponseInterface
{
return new TextResponse(
$environment->getUrlGenerator()->generateUrl('getUser', ['name' => 'myUserName'])
);
}
namespace MyNamespace;
/**
* @Annotation
*/
class MyAnnotation
{
public $value;
}
namespace MyNamespace;
use inroutephp\inroute\Annotations\Pipe;
/**
* @Annotation
*/
class AdminRequired extends Pipe
{
public $middlewares = ['AuthMiddleware', 'RequireUserGroupMiddleware'];
public $attributes = ['
use MyNamespace\MyAnnotation;
use MyNamespace\AdminRequired;
class MyController
{
/**
* @MyAnnotation(value="foobar")
* @AdminRequired
*/
public function aRouteThatIsOnlyOpenToAdminUsers()
{
}
}
use inroutephp\inroute\Compiler\CompilerPassInterface;
use inroutephp\inroute\Runtime\RouteInterface;
use MyNamespace\MyAnnotation;
class MyCompilerPass implements CompilerPassInterface
{
public function processRoute(RouteInterface $route): RouteInterface
{
if ($route->hasAnnotation(MyAnnotation::CLASS)) {
return $route
->withAttribute('cool-attribute', $route->getAnnotation(MyAnnotation::CLASS)->value)
->withMiddleware(SomeCoolMiddleware::CLASS);
}
return $route;
}
}
$container = /* your custom setup */;
$router = new example\HttpRouter;
$router->setContainer($container);
// continue dispatch...
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.