1. Go to this page and download the library: Download phputil/router 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/ */
phputil / router example snippets
// Sets the 'rootURL' to where the index.php is located.
$app->listen( [ 'rootURL' => dirname( $_SERVER['PHP_SELF'] ) ] );
use \phputil\router\Router;
$app = new Router();
$app->get( '/', function( $req, $res ) {
$res->send( 'Hello World!' );
} );
$app->listen();
$app->
route( '/employees' )
->get( '/emails', function( $req, $res ) { /* GET /employees/emails */ } )
->get( '/phone-numbers', function( $req, $res ) { /* GET /employees/phone-numbers */ } )
->post( '/children', function( $req, $res ) { /* POST /employees/children */ } )
->end() // Finishes the group and back to "/"
->get( '/customers', function( $req, $res ) { /* GET /customers */ } )
;
$app->
route( '/products' )
->get( '/colors', function( $req, $res ) { /* GET /products/colors */ } )
->route( '/suppliers' )
->get( '/emails', function( $req, $res ) { /* GET /products/suppliers/emails */ } )
->end() // Finishes "/suppliers" and back to "/products"
->get( '/sizes', function( $req, $res ) { /* GET /products/sizes */ } )
->end() // Finishes "/products" and back to "/"
->get( '/sales', function( $req, $res ) { /* GET /sales */ } )
;
$app
->use( $myMiddlewareFunction )
->get( '/hello', $sayHelloFunction ); // Executes after the middleware
function listen( array|RouterOptions $options = [] ): void
// Sets the 'rootURL' to where the index.php is located.
$app->listen( [ 'rootURL' => dirname( $_SERVER['PHP_SELF'] ) ] );
use phputil\router\RouterOptions;
// Sets the 'rootURL' to where the index.php is located.
$app->listen( ( new RouterOptions() )->withRootURL( dirname( $_SERVER['PHP_SELF'] ) ) );
withRootURL( string $url ): RouterOptions
withReq( HttpRequest $req ): RouterOptions
withRes( HttpResponse $res ): RouterOptions
interface HttpRequest {
/** Returns the current URL or `null` on failure. */
function url(): ?string;
/** Returns the current URL without any queries. E.g. `/foo?bar=10` -> `/foo` */
function urlWithoutQueries(): ?string;
/** Returns the URL queries. E.g. `/foo?bar=10&zoo=A` -> `['bar'=>'10', 'zoo'=>'A']` */
function queries(): array;
/** Returns all HTTP request headers */
function headers(): array;
/** Returns the header with the given case-insensitive name, or `null` if not found. */
function header( $name ): ?string;
/** Returns the raw body or `null` on failure. */
function rawBody(): ?string;
/**
* Returns the converted content, depending on the `Content-Type` header:
* - For `x-www-form-urlencoded`, it returns an `array`;
* - For `application/json`, it returns an `object` or an `array` (depending on the content).
* - Otherwise it returns a `string`, or `null` on failure.
*/
function body();
/** Returns the HTTP request method or `null` on failure. */
function method(): ?string;
/** Returns all cookies as an array (map). */
function cookies(): array;
/**
* Returns the cookie value with the given case-insensitive key or `null` if not found.
*
* @param string $key Cookie key.
* @return string|null
*/
function cookie( $key ): ?string;
/**
* Returns a URL query or route parameter with the given name (key),
* or `null` when the given name is not found.
*
* @param string $name Parameter name.
* @return string
*/
function param( $name ): ?string;
/**
* Returns all the URL queries and route parameters as an array (map).
* @return array
*/
function params(): array;
/**
* Returns extra, user-configurable data.
* @return ExtraData
*/
function extra(): ExtraData;
}
class ExtraData {
/**
* Sets a value to the given key. Chainable method.
*
* @param string|int $key
* @param mixed $value
* @return ExtraData
*/
function set( $key, $value ): ExtraData;
/**
* Returns the value for the given key, or null otherwise.
* @param string|int $key
* @return mixed
*/
function get( $key );
/**
* Returns the keys and values as an array.
*/
function toArray(): array;
}
interface HttpResponse {
/**
* Sets the HTTP status code.
*
* @param int $code HTTP status code.
* @return HttpResponse
*/
function status( int $code ): HttpResponse;
/**
* Indicates if the current HTTP status code is equal to the given one.
*
* @param int $code HTTP status code.
* @return bool
*/
function isStatus( int $code ): bool;
/**
* Sets an HTTP header.
*
* @param string $header HTTP header.
* @param string|int|float|bool|array $value Header value.
* @return HttpResponse
*/
function header( string $header, $value ): HttpResponse;
/**
* Indicates if the response has the given HTTP header.
*
* @param string $header HTTP header.
* @return boolean
*/
function hasHeader( string $header ): bool;
/**
* Returns the response header, if it exists. Returns `null` otherwise.
*
* @param string $header HTTP header.
* @return string|null
*/
function getHeader( string $header ): ?string;
/**
* Removes a header.
*
* @param string $header Header to remove.
*/
function removeHeader( string $header ): void;
/**
* Sets a redirect response.
*
* @param int $statusCode HTTP status code.
* @param string|null $path Path.
* @return HttpResponse
*/
function redirect( int $statusCode, $path = null ): HttpResponse;
/**
* Sets a cookie.
*
* @param string $name Name (key)
* @param string $value Value.
* @param array $options Optional map with the following options:
* - `domain`: string
* - `path`: string
* - `httpOnly`: true|1
* - `secure`: true|1
* - `maxAge`: int
* - `expires`: string
* - `sameSite`: true|1
* @return HttpResponse
*
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies for options' meanings.
*/
function cookie( string $name, string $value, array $options = [] ): HttpResponse;
/**
* Clears a cookie with the given name (key).
*
* @param string $name Name (key)
* @param array $options Optional map with the same options as #cookie()'s.
* @return HttpResponse
*/
function clearCookie( string $name, array $options = [] ): HttpResponse;
/**
* Sets the `Content-Type` header with the given MIME type.
*
* @param string $mime MIME type.
* @return HttpResponse
*/
function type( string $mime ): HttpResponse;
/**
* Sends the given HTTP response body.
*
* @param mixed $body Response body.
* @return HttpResponse
*/
function send( $body ): HttpResponse;
/**
* Sends a file based on its path.
*
* @param string $path File path
* @param array $options Optional map with the options:
* - `mime`: string - MIME type, such as `application/pdf`.
* @return HttpResponse
*/
function sendFile( string $path, array $options = [] ): HttpResponse;
/**
* Send the given content as JSON, also setting the needed headers.
*
* @param mixed $body Content to send as JSON.
* @return HttpResponse
*/
function json( $body ): HttpResponse;
/**
* Ends the HTTP response.
*
* @param bool $clear If it is desired to clear the headers and the body after sending them. It defaults to `true`.
*/
function end( bool $clear = true ): HttpResponse;
}
use \phputil\router\FakeHttpRequest;
use \phputil\router\Router;
$app = new Router();
// Set a expectation
$app->get( '/foo', function( $req, $res ) { $res->send( 'Called!' ); } );
// Mock the request
$fakeReq = new FakeHttpRequest();
$fakeReq->withURL( '/foo' )->withMethod( 'GET' );
// Use the mock request
$app->listen( [ 'req' => $fakeReq ] ); // It will use the fake request to call "/foo"
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.