Download the PHP package triangle/router without Composer

On this page you can find all versions of the php package triangle/router. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package router

Скачивания Коммиты Версия Версия PHP Лицензия

Маршрутизатор HTTP-запросов

Эта библиотека обеспечивает быструю реализацию маршрутизатора на основе регулярных выражений. Статья, о том, как работает реализация и почему она быстрее.

Установка

Для установки через Composer:

Требуется PHP 8.0 или выше.

Usage

Пример использования:

Определение маршрутов

Маршруты определяются путем вызова функции simpleRouteDispatcher(), которая принимает вызываемый объект, принимающий экземпляр Triangle\Router\RouteCollector. Маршруты добавляются путем вызова addRoute() на экземпляре коллектора:

Параметр $method — это строка HTTP-метода в верхнем регистре, для которой должен совпадать определенный маршрут. Можно указать несколько допустимых методов с помощью массива:

По умолчанию $routePattern использует синтаксис, где {foo} указывает заполнитель с именем foo и соответствует регулярному выражению [^/]+. Чтобы настроить шаблон, которому соответствует заполнитель, вы можете указать пользовательский шаблон, написав {bar:[0-9]+}. Вот несколько примеров:

Пользовательские шаблоны для заполнителей маршрутов не могут использовать группы захвата. Например, {lang:(en|de)} не является допустимым заполнителем, поскольку () является группой захвата. Вместо этого вы можете использовать либо {lang:en|de}, либо {lang:(?:en|de)}.

Кроме того, части маршрута, заключенные в [...], считаются необязательными, поэтому /foo[bar] будет соответствовать как /foo, так и /foobar. Необязательные части поддерживаются только в конце, но не в середине маршрута.

Параметр $handler не обязательно должен быть обратным вызовом, он также может быть именем класса контроллера или любым другим типом данных, которые вы хотите связать с маршрутом. Маршрутизатор только сообщает вам, какой обработчик соответствует вашему URI, как вы его интерпретируете, зависит от вас.

Сокращения для популярных методов

Для методов GET, POST, PUT, PATCH, DELETE, HEAD и OPTIONS доступны сокращения. Например, маршруты:

Эквивалентны:

Если маршрут предполагает все существующие (и не существующие) методы - можно использовать:

Группы маршрутов

Кроме того, вы можете указать маршруты внутри группы. Все маршруты, определенные внутри группы, будут иметь общий префикс.

Например, определение ваших маршрутов как:

Будет иметь тот же результат, что и:

Также поддерживаются вложенные группы, в этом случае префиксы всех вложенных групп объединяются.

Кэширование

Причина, по которой simpleRouteDispatcher принимает обратный вызов для определения маршрутов, заключается в том, чтобы разрешить бесшовное кэширование. Используя cachedRouteDispatcher вместо simpleRouteDispatcher, вы можете кэшировать сгенерированные данные маршрутизации и создать диспетчер из кэшированной информации:

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

Обработка URI

URI обрабатывается путем вызова метода dispatch() созданного диспетчера. Этот метод принимает метод HTTP и URI. Получение этих двух битов информации (и их нормализация соответствующим образом) — ваша работа — эта библиотека не привязана к SAPI PHP.

Метод dispatch() возвращает массив, первый элемент которого содержит код состояния. Это один из Dispatcher::NOT_FOUND, Dispatcher::METHOD_NOT_ALLOWED и Dispatcher::FOUND. Для состояния «метод не разрешен» второй элемент массива содержит список методов HTTP, разрешенных для предоставленного URI. Например:

[Triangle\Router\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']]

ПРИМЕЧАНИЕ: Спецификация HTTP требует, чтобы ответ 405 Method Not Allowed включал заголовок Allow: для детализации доступных методов для запрошенного ресурса. Приложения, использующие Triangle Router, должны использовать второй элемент массива для добавления этого заголовка при ретрансляции ответа 405.

Для статуса Dispatcher::FOUND второй элемент массива — это обработчик, который был связан с маршрутом, а третий элемент массива — это словарь имен переменных для их значений. Например:

/* Маршрутизация по GET /user/localzet/42 */

[Triangle\Router\Dispatcher::FOUND, 'handler0', ['name' => 'localzet', 'id' => '42']]

Переопределение парсера маршрута и диспетчера

Процесс маршрутизации использует три компонента: парсер маршрута, генератор данных и диспетчер. Три компонента придерживаются следующих интерфейсов:

Парсер маршрута берет строку шаблона маршрута и преобразует ее в массив информаций о маршруте, где каждая информация снова является массивом своих частей. Структуру лучше всего понять на примере:

/* Маршрут /user/{id:\d+}[/{name}] преобразуется в следующий массив: */
[
    [
        '/user/',
        ['id', '\d+'],
    ],
    [
        '/user/',
        ['id', '\d+'],
        '/',
        ['name', '[^/]+'],
    ],
]

Этот массив затем можно передать в метод addRoute() генератора данных. После добавления всех маршрутов вызывается getData() генератора, который возвращает все данные маршрутизации, необходимые диспетчеру. Формат этих данных далее не указывается — он тесно связан с соответствующим диспетчером.

Диспетчер принимает данные маршрутизации через конструктор и предоставляет метод dispatch(), с которым вы уже знакомы.

Парсер маршрута можно переопределить по отдельности (чтобы использовать другой синтаксис шаблона), однако генератор данных и диспетчер всегда следует изменять как пару, поскольку вывод первого тесно связан со вводом второго. Причина, по которой генератор и диспетчер разделены, заключается в том, что только последний нужен при использовании кэширования (поскольку вывод первого — это то, что кэшируется.)

При использовании функций simpleRouteDispatcher / cachedRouteDispatcher из вышеприведенных переопределение происходит через массив параметров:

Массив параметров выше соответствует значениям по умолчанию. Заменив GroupCountBased на GroupPosBased, вы можете переключиться на другую стратегию диспетчеризации.

Примечание о запросах HEAD

Спецификация HTTP требует, чтобы серверы поддерживали как методы GET, так и методы HEAD:

Методы GET и HEAD ДОЛЖНЫ поддерживаться всеми серверами общего назначения

Чтобы не заставлять пользователей вручную регистрировать маршруты HEAD для каждого ресурса, мы возвращаемся к сопоставлению доступного маршрута GET для данного ресурса. PHP SAPI прозрачно удаляет тело сущности из ответов HEAD, поэтому это поведение не влияет на подавляющее большинство пользователей.

Однако разработчики, использующие Triangle Router вне веб-среды SAPI (например, пользовательский сервер), НЕ ДОЛЖНЫ отправлять тела сущностей, сгенерированные в ответ на запросы HEAD. Если вы не являетесь пользователем SAPI, это ваша ответственность; Triangle Router не имеет полномочий, чтобы помешать вам нарушить HTTP в таких случаях.

Наконец, обратите внимание, что приложения МОГУТ всегда указывать свой собственный маршрут метода HEAD для данного ресурса, чтобы полностью обойти это поведение.

Авторы

Эта библиотека основана на маршрутизаторах, реализованных Levi Morrison и Nikita Popov.


All versions of router with dependencies

PHP Build Version
Package Version
Requires php Version >=8.0
triangle/engine Version >=6.3
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package triangle/router contains the following files

Loading the files please wait ....