ice-cream / router
Ice Cream Router is meant to be the easiest router in the world. No Fuss, No Muss
Requires
- php: >=7.2.0
- symfony/http-foundation: 4.*
- symfony/routing: 4.*
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.6.1
- phpunit/php-code-coverage: 6.0.*
- phpunit/phpunit: 7.0.2
This package is not auto-updated.
Last update: 2024-11-09 20:28:19 UTC
README
- Requires PHP 7.2
- Is Standalone
This is a very thin and very basic wrapper around the concept of symfony routing.
It's main goal is to be as simple and easy to use as possible with no bloat or fluff.
Documentation
Why is there no generated documentation, like the other Ice Cream packages?
Because PHP Documentor has a symfony config that conflicts with the symfony router.
How Do I Use It?
The simplest way to use this is:
use IceCreamRouter\Router; $router = new Router(); $router->get('/foo/{id}', 'foo', function($id, $request, $response){ return response->setContent('Id is: ' . $id); }); $response = $router->processRoutes(Request::create('/foo/1', 'GET')); var_dump($response->getContent()); // => Id is: 1
Could not get any simpler then that.
The same thing is done for POST
, PUT
and DELETE
The only difference between whats above and what you would do
for these methods is omitting $response
as a variable for the closure.
use IceCreamRouter\Router; $router = new Router(); $router->post('/foo/{id}', 'foo', function($id, $request){ return new Response('the message passed in was: ' . $request->get('message') . ' and the id is: ' . $id); }); $response = $router->processRoutes(Request::create('/foo/1', 'POST', ['message' => 'hello world'])); var_dump($response->getContent()); // => the message passed in was: hello world and the id is: 1
We are even smart enough, with the help of symfony, to recognize the same route with different methods:
use IceCreamRouter\Router; $router = new Router(); $router->post('/foo/{id}', 'foo', function($id, $request){ return new Response('the message passed in was: ' . $request->get('message') . ' and the id is: ' . $id); }); $router->delete('/foo/{id}', 'foo_del', function($id, $request){ return new Response('deleted'); }); $router->put('/foo/{id}', 'foo_put', function($id, $request){ return new Response('the message put was: ' . $request->get('message') . ' and the id is: ' . $id); }); $response = $router->processRoutes(Request::create('/foo/1', 'POST', ['message' => 'hello world'])); var_dump($response->getContent()); // => the message passed in was: hello world and the id is: 1
You can see here that we have the same end point, with different methods, as a result we can create a request
that only does POST
and it will match the correct endpoint.