Cherry-project Router

v1.1.0 2019-05-04 15:23 UTC

This package is auto-updated.

Last update: 2022-05-04 22:12:37 UTC


The Cherry-project Router

GitHub license

GitHub release

Packagist Version


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 [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