1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dvaknheo-duckphp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
tutorial-route.md 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 13.03.2025 12:05 5f7b14b

Роутинг

[toc]

Классы роутинга в DuckPhp довольно сложные и являются ключевыми.

Относительные классы

По умолчанию базовый роутинг

DuckPhp поддерживает множество способов роутинга, но наиболее распространенным и основным является файловый тип роутинга.

Разделение происходит по /, указанному в PATH_INFO, последний элемент — это метод, а все остальные — пространство имён и имя класса.

Предположим, что пространство имён нашего проекта равно 'MyProject'; по умолчанию опция 'namespace_controller' равна 'Controller'.

Соответствие класс -> метод:

/           => MyProject\Controller\MainController->action_index
/test       => MyProject\Controller\MainController->action_test
/a/b        => MyProject\Controller\aController->action_b
/x/y/z      => MyProject\Controller\x\yController->action_z

В отличие от популярных фреймворков, контроллерные методы в Duckphp не требуют возвращения каких-либо значений.

Для вывода используется другой класс, например, Duckphp\Foundation\Helper::Show(get_defined_vars());.

Процесс роутинга реализован в методе run() класса DuckPhp\Core\Route.

Класс Route имеет множество опций, различные проекты могут иметь разные настройки. Здесь мы выделили некоторые важные опции.

Основной роутинг использует Main (controller_welcome_class опция).Чтобы различать POST и GET, существует опция controller_prefix_post. Если соответствующий метод отсутствует, это также допустимо. Этот трюк полезен во многих ситуациях. По умолчанию значение равно do_.'controller_path_prefix' => '', иногда вам нужно обрабатывать только маршруты с определённым началом.

Строгий режим

'controller_hide_boot_class' => false, метка контроллера, скрывающая специальное входное окно, например, чтобы люди не могли получить доступ к MyProject\Controller\MainController->action_index через /Main/index.

Описание опций

'controller_class_base' => '', ограничивает контроллеры обязательным наследованием базового класса или реализацией интерфейса
'controller_prefix_post' => 'do_', префикс для методов POST контроллеров, который помогает легко разделить методы POST от других методов; если нет соответствующего метода, он игнорируется

'namespace' => '', пространство имён
'namespace_controller' => 'Controller', пространство имён контроллеров; если начинается с '\\', то конфигурация опции 'namespace' игнорируется

Хук маршрута основного разработчика

Хук маршрута — это набор хуков, выполняемых до и после выполнения маршрута. Добавление осуществляется с помощью вызова App::addRouteHook($callback, $position, $once = true).

Параметр $once указывает, что одного хука такого типа достаточно.

Параметр position имеет четыре позиции:

const HOOK_PREPEND_OUTTER = 'prepend-outter';
const HOOK_PREPEND_INNER = 'prepend-inner';
const HOOK_APPEND_INNER = 'append-inner';
const HOOK_APPEND_OUTTER = 'append-outter';

DuckPhp по умолчанию загружает плагин DuckPhp\Component\RouteHookRouteMap. Это реализует маршрутное отображение.

Другие расширения могут иметь больше хуков. Если вы хотите узнать "почему есть этот адрес", обратитесь к основному разработчику.Можно использовать C::getRoutes() для получения таблицы маршрутов, C::getParameters() для получения параметров запроса, эффективность переопределения адреса. Если требуется проверка прав доступа, используйте C::getRouteCallingMethod() в конструкторе для получения текущего метода вызова.

Опции:

'route_map' => array(), // маршрутное отображение
'route_map_important' => array(), // важное маршрутное отображение

Маршрут без PATH_INFO основной разработчик

Иногда вам нужно создать локальный проект без изменения конфигурации веб-сервера. В этом случае можно использовать маршрут без PATH_INFO.

Откомментируйте следующий код в опциях:

$options['path_info_compact_action_key'] = "_r";
$options['path_info_compact_class_key'] = "";

Описание опций: path_info_compact_action_key используется как ключ для $_GET, который передается маршруту.

Если нет path_info_compact_class_key, то URL будет выглядеть так: ?\_r=/test/done. Если она присутствует, URL будет таким: ?\_m=test&_r=done.

Функция URL($url) также заменена на соответствующую реализацию.

Опции:

'path_info_compact_action_key' => '_r', // ключ для действия GET
'path_info_compact_class_key' => '', // ключ для класса GET
'path_info_compact_enable' => false, // использование _GET для имитации маршрута без PathInfo

По умолчанию жизненный цикл маршрута основной разработчик

Функция run.

Привязка данных сервера Выполнение предварительных хуков Выполнение основного маршрута Выполнение последних хуков ////Основной маршрут: получение основного обратного вызова. Выполнение основного обратного вызова defaultGetRouteCallback. Получение основного класса Создание экземпляра. Получение метода для вызова getMethodToCall. Вызов метода класса.

Расширенные материалы: создание хуков маршрута primary developer

...


Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dvaknheo-duckphp.git
git@api.gitlife.ru:oschina-mirror/dvaknheo-duckphp.git
oschina-mirror
dvaknheo-duckphp
dvaknheo-duckphp
master