Роутинг в электронике

Принцип работы по определению контроллера

Роутинг, это выдача контента пользователю в зависимости от адреса к которому он обратился. Поскольку в MVC за генерацию страницы отвечает метод контроллера, то соответственно в зависимости от данных полученных в запросе, роутер должен направить пользователя к необходимому методу. В Электронике реализованы два типа доступа: web - когда пользователь обращается к системе через браузер, concole - когда пользователь обращается к системе через консоль.

web доступ

Для определения маршрута основными критериями являютя тип запроса (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 

Кроме того, в системе реализованы встроенные консольные команды.

Grewi 2024