[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.
Откомментируйте следующий код в опциях:
$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 )