1. Go to this page and download the library: Download minhngoc/phroute 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/ */
minhngoc / phroute example snippets
$router->get('/example', function(){
return 'This route responds to requests with the GET method at the path /example';
});
$router->post('/example/{id}', function($id){
return 'This route responds to requests with the POST method at the path /example/1234. It passes in the parameter as a function argument.';
});
$router->any('/example', function(){
return 'This route responds to any method (POST, GET, DELETE, OPTIONS, HEAD etc...) at the path /example';
});
use Phroute\Phroute\RouteCollector;
$router = new RouteCollector();
$router->get($route, $handler); # match only get requests
$router->post($route, $handler); # match only post requests
$router->delete($route, $handler); # match only delete requests
$router->any($route, $handler); # match any request method
etc...
$router->any('/example', function(){
return 'This route responds to any method (POST, GET, DELETE etc...) at the URI /example';
});
// or '/page/{id:i}' (see shortcuts)
$router->post('/page/{id:\d+}', function($id){
// $id contains the url paramter
return 'This route responds to the post method at the URI /page/{param} where param is at least one number';
});
$router->any('/', function(){
return 'This responds to the default route';
});
// Lazy load autoloaded route handling classes using strings for classnames
// Calls the Controllers\User::displayUser($id) method with {id} parameter as an argument
$router->any('/users/{id}', ['Controllers\User','displayUser']);
// Optional Parameters
// simply add a '?' after the route name to make the parameter optional
// NB. be sure to add a default value for the function argument
$router->get('/user/{id}?', function($id = null) {
return 'second';
});
# NB. You can cache the return value from $router->getData() so you don't have to create the routes each request - massive speed gains
$dispatcher = new Phroute\Phroute\Dispatcher($router->getData());
$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
// Print out the value returned from the dispatched function
echo $response;
$router->get(['/user/{name}', 'username'], function($name){
return 'Hello ' . $name;
})
->get(['/page/{slug}/{id:\d+}', 'page'], function($id){
return 'You must be authenticated to see this page: ' . $id;
});
// Use the routename and pass in any route parameters to reverse engineer an existing route path
// If you change your route path above, you won't need to go through your code updating any links/references to that route
$router->route('username', 'joe');
// string(9) '/user/joe'
$router->route('page', ['intro', 456]);
// string(15) '/page/intro/456'
// Any thing other than null returned from a filter will prevent the route handler from being dispatched
$router->filter('auth', function(){
if(!isset($_SESSION['user']))
{
header('Location: /login');
return false;
}
});
$router->group(['before' => 'auth'], function($router){
$router->get('/user/{name}', function($name){
return 'Hello ' . $name;
})
->get('/page/{id:\d+}', function($id){
return 'You must be authenticated to see this page: ' . $id;
});
});
// You can combine a prefix with a filter, eg. `['prefix' => 'admin', 'before' => 'auth']`
$router->group(['prefix' => 'admin'], function($router){
$router->get('pages', function(){
return 'page management';
});
$router->get('products', function(){
return 'product management';
});
$router->get('orders', function(){
return 'order management';
});
});
namespace MyApp;
class Test {
public function anyIndex()
{
return 'This is the default page and will respond to /controller and /controller/index';
}
/**
* One Test()
{
return 'This will respond to /controller/test with only a GET method';
}
public function postTest()
{
return 'This will respond to /controller/test with only a POST method';
}
public function putTest()
{
return 'This will respond to /controller/test with only a PUT method';
}
public function deleteTest()
{
return 'This will respond to /controller/test with only a DELETE method';
}
}
$router->controller('/controller', 'MyApp\\Test');
// Controller with associated filter
$router->controller('/controller', 'MyApp\\Test', ['before' => 'auth']);
use Orno\Di\Container;
use Phroute\Phroute\HandlerResolverInterface;
class RouterResolver implements HandlerResolverInterface
{
private $container;
public function __construct(Container $container)
{
$this->container = $container;
}
public function resolve($handler)
{
/*
* Only attempt resolve uninstantiated objects which will be in the form:
*
* $handler = ['App\Controllers\Home', 'method'];
*/
if(is_array($handler) and is_string($handler[0]))
{
$handler[0] = $this->container[$handler[0]];
}
return $handler;
}
}
$appContainer = new Orno\Di;
// Attach your controllers as normal
// $appContainer->add('App\Controllers\Home')
$resolver = new RouterResolver($appContainer);
$response = (new Phroute\Phroute\Dispatcher($router, $resolver))->dispatch($requestMethod, $requestUri);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.