cherry-project / router
Cherry-project Router
Requires
- php: >=5.6.0
- ext-json: *
- cherry-project/request: 1.0.1
This package is auto-updated.
Last update: 2024-12-05 03:54:20 UTC
README
The Cherry-project Router
Including
Install from composer composer require cherry-project/router
Include Autoloader in your main file (Ex.: index.php)
require_once __DIR__ . '/vendor/autoload.php';
Define application root directory
define('__ROOT__', __DIR__);
In your application you must have config.json file for storing app configuration settings and you must define his location:
define('CONFIG_FILE', __DIR__ . '/config/config.json');
config.json must contain path to routes.json and controllers directory
{ "ROUTES_FILE": "config/routes.json", "CONTROLLERS_PATH": "controllers" }
Get app config parameters and define it:
$config = file_get_contents(CONFIG_FILE) or die("Unable to open config file!"); $config = json_decode($config, 1); foreach ($config as $k => $v) define($k, __DIR__ . '/' . $v);
Notice: This approach will be replaced in the new version :))
It's time to configure routes file
The routes file is a json file, where object key is route unique name.
Each route must have path, method and action keys. Homepage route example:
{ "homepage": { "path": "/", "method": "GET", "action": "DefaultController::index" } }
Router file basic structure
{ "[RouteName]": { "path": "[URL]", "method": "[HTTP_Method]", "action": "[Controller]::[Method]" } }
Definitions for router keys:
- [RouteName] - Route unique name;
- path - Route url. (Ex.: For address http://www.example.com/homepage [URL] is homepage);
- method - Route HTTP Method. Allowed all HTTP methods;
- action - Route callback action. The firs part of action (before ::) is your controller (stored in CONTROLLERS_PATH). Controller is a simple PHP Class where [Controller] is Class name (Class name and class filename must have same names (Ex.: [Controller].php)). The second part of action key (after ::) is controllers (class) public method;
Your route path can use Placeholders. Placeholder is a template of your route.
Route example with placeholder:
{ "homepage": { "path": "/hello/{name}", "method": "GET", "action": "DefaultController::sayHello" } }
There we have placeholder called {name} and we can get this value in controller:
public function sayHello($name) { echo "Hello, {$name}"; }
2019 © Cherry-project