<?php 
/** 
 * Luminova Framework 
 * 
 * @package Luminova 
 * @author Ujah Chigozie Peter 
 * @copyright (c) Nanoblock Technology Ltd 
 * @license See LICENSE file 
*/ 
declare(strict_types=1); 
 
use \Luminova\Boot; 
use \Luminova\Routing\Prefix; 
use \App\Controllers\Errors\ViewErrors; 
 
require_once __DIR__ . '/../system/Boot.php'; 
 
/** 
 * Ensure that we are in front controller while running script in cli mode 
*/ 
if (getcwd() . DIRECTORY_SEPARATOR !== FRONT_CONTROLLER) { 
    chdir(FRONT_CONTROLLER); 
} 
 
/** 
 * Load application route context. 
 * Register all your application contexts such as `WEB, API, CONSOLE and CLI` depending on our requirements. 
 *  
 * @param Prefix|array<string,mixed> $contexts [, Prefix|array<string,mixed> ...$] Routes context method accept arguments array or new Prefix class instance. 
 *  
 * @example For context class instance, pass new instance of Context as shown below. 
 *  - @param string $name Route URI prefix name, any url that starts with $name will be routed to name.php in routes/name.php. 
 *  - @param Closure|array<int,string>|null $onError For error argument, which handles 404 errors. 
 *          - `Closure` Using closures, pass a callable object or string as shown below. 
 *              fn(Application $app): int => ViewErrors::onWebError($app)) 
 *          - `Array` For array, pass a list array with only 2 elements, your error controller string-class name and the method name to handle error. 
 *              [ErrorHandlerController::class, 'handlerMethod'] 
 *  
 *  
 * @example For array context, pass an array of prefix configuration expecting only associative array with 2 keys `prefix` and `error`. 
 *      -   The key `prefix` Should indicate your context name. 
 *      -   The key `error` Should indicate your error handler, which can be `NULL`, `Closure` or `Array` indicating controller class and method. 
 *              [ 
 *                   'prefix' => 'foo',  
 *                   'error' => [ViewErrors::class, 'onFooError']  
 *               ] 
 *  
 * Finally run your application router to register and boot only request context for optimal performance. 
*/ 
Boot::http()->router->context( 
    new Prefix(Prefix::WEB, [ViewErrors::class, 'onWebError']), 
    new Prefix(Prefix::API, [ViewErrors::class, 'onApiError']), 
    new Prefix(Prefix::CLI) 
)->run();
 
 |