rossriley / stack-aura-router
Stack middleware to add Routes to the request object
Installs: 1 483
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: >=5.4.0
- aura/router: ^2.3
- symfony/http-foundation: ^2.4
- symfony/http-kernel: ^2.4
This package is not auto-updated.
Last update: 2024-12-21 16:31:01 UTC
README
Technologies Used
You need to build your app using Stack PHP
Installation
Is best done via composer, all you need to do is add this to the (or ignore any packages that you already have) require block of your composer.json file:
require: {
....
"aura/router": "~2.0@dev" ,
"rossriley/stack-aura-router": "1.0.*@dev",
"stack/builder" : "dev-master",
"stack/url-map" : "dev-master",
"stack/run" : "dev-master",
....
}
How it works
This project works on a very simple concept. Using Aura Router which is a lovely decoupled Routing package you can define your routes and add the data to an HTTP request object.
Here's an example of bootstrapping an application:
First up configure your routes:
#routes.php
<?php
use Aura\Router\RouterFactory;
$router_factory = new RouterFactory;
$router = $router_factory->newInstance();
$router->setValues(['controller' => 'YourNamespace\Controller\Main']);
$router->add("homepage", '/'')->addValues(["action"=>"index"]);
$router->add("signup", '/signup')->addValues(["action"=>"signup"]);
......
Then bootstrap your app:
#public/index.php
$router = include(__DIR__."/../config/routes.php");
$app = new YourNamespace\Application;
$app = (new Stack\Builder())
->push('Stack\Session')
->push('Stack\Aura\RequestRouter', $router)
->resolve($app);
Stack\run($app);
How to use the compiled routes.
Since your Stack app handles an HttpKernelInterface $request
instance, your route details can be fetched directly from the request
$route = $request->attributes->get("route");
// This outputs with a request to /
Array (
[controller] => YourNamespace\Controller\Main
[action] => index
[_name] => homepage
[_route] => /
)
As you'll see this output matches the route you described in your routes.php
file.
Similarly, the signup route would output the following:
$route = $request->attributes->get("route");
// This outputs with a request to /signup
Array (
[controller] => YourNamespace\Controller\Main
[action] => signup
[_name] => signup
[_route] => /signup
)
Contributions Welcome
This is a relatively new project in early alpha stage, although it's being used in the wild by a few fairly large projects. Pull requests / ideas for improvement are most welcome.