Роутинг, это выдача контента пользователю в зависимости от адреса к которому он обратился. Поскольку в MVC за генерацию страницы отвечает метод контроллера, то соответственно в зависимости от данных полученных в запросе, роутер должен направить пользователя к необходимому методу. В Электронике реализованы два типа доступа: web - когда пользователь обращается к системе через браузер, concole - когда пользователь обращается к системе через консоль.
Для определения маршрута основными критериями являютя тип запроса (GET, POST и т.д.) и путь в адресе (параметры разделнные слешем).
Определение маршрута начинается с настройки сервера, все запросы, при отсутствии физически существующего файла, должны направлятся на файл /public/index.php
в публичной директории, по умолчанию public
Пример /public/.htaccess
для apache
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Далее подключается корневой файл index.php
здесь определяются первичные константы, в том числе и директория приложения, по умолчанию app
.
<?php
session_start();
define('ENTRANSE', 'web');
define('INDEX', true);
define('ROOT', str_replace('\\', '/', __DIR__));
define('APP_NAME', 'app');
define('APP', ROOT . '/' . APP_NAME);
define('SYSTEM', ROOT . '/system');
define('ARGV', null);
require_once SYSTEM . '/system.php';
На некоторых хостингах нет возможности определить точкой входа отдельную публичную директорию, в этом случае можно определить точкой входа корневой index.php Кроме того, можно использовать корневой .htaccess для перенаправления
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ /public/$1 [L]
RewriteRule ^((?!public/).*) /public/$l [L,NC]
</IfModule>
Далее подключается system, где подключается файл /{app}/route/web.php
приложения определённого в константе APP
Пример файла web.php
<?php
use electronic\core\route\route;
use app\controllers\error\error;
$route = new route();
В системе реализована возможность выполнения запросов из консоли при разработке приложений. Точкой входа является корневой файл e
(без расширения)
<?php
define('INDEX', true);
define('ROOT', str_replace('\\', '/', __DIR__));
define('ENTRANSE', 'console');
define('ARGV', $argv);
define('APP_NAME', 'app');
define('APP', ROOT . '/' . APP_NAME);
define('SYSTEM', ROOT . '/system');
require_once ROOT . '/system/system.php';
Запросы направляются на файл /{app}/console/console.php
Кроме того, в системе реализованы встроенные консольные команды.