Подтвердить что ты не робот

Есть ли отдельная библиотека маршрутизации PHP?

Я хочу добавить динамическую маршрутизацию REST-esque в приложение PHP. Я бы хотел использовать существующую библиотеку маршрутизации, поэтому мне не нужно изобретать колесо.

Однако, когда я смотрю на такие вещи, как Slim и F3, все они приходят с вещами, которые я не хочу - например, с шаблонами и MVC. Поскольку мне просто нужна маршрутизация, у меня получилось бы много кода рамки в моем приложении, которое мне не нужно.

Есть ли там хорошая библиотека, которая только делает маршрутизацию? Или я застрял в импорте полной структуры или изобретательности колеса?

4b9b3361

Ответ 1

Попробуйте Klein:

Отдельный файл, автономный и надежный:

"klein.php - это молниеносный маршрутизатор для PHP 5.3 +"

  • Гибкая маршрутизация регулярных выражений (вдохновленная Синатрой)
  • Набор шаблонных методов для быстрого создания веб-приложений
  • Почти нет надбавок = > 2500+ запросов/сек

https://github.com/chriso/klein.php

Ответ 2

Из-за старых ответов на этот вопрос, я думаю, было бы неплохо упомянуть о некоторых более современных решениях дела в OP.

Два решения, которые пришли мне на ум, как только я увидел ваш вопрос:

Phroute построен поверх FastRoute, поэтому они оба требуют PHP 5.4.

Если вам нужно решение PHP 5.3+, я бы определенно рекомендовал маршрутизацию Slim Framework. Если вам не нужны какие-либо другие функции, которые входят в структуру, вы можете извлечь детали маршрутизации и использовать только их (SLIM - лицензия MIT, поэтому вам разрешено делать что-либо)

Ive использовал тонкую маршрутизацию автономно, в моем проекте - DaGhostman\CodeWave @github, см. теги <= 2.4, относительные части находятся в Application\Core и Application\Controller.

Ответ 3

Fastroute - это автономная библиотека маршрутизации. Он основан на модели ООП и имеет полную структуру тестирования. Открытый исходный код и лицензия бесплатны. Если вы ищете что-то, чтобы изменить для своих проектов, это хорошее место для начала.

https://github.com/nikic/FastRoute

Ответ 4

Попробуйте отправить: https://github.com/noodlehaus/dispatch

require 'dispatch.php';

get('/', function () {
   echo "Hello world!\n";
});

dispatch();

Это однофайловая структура маршрутизации для PHP. Очень легкий, очень прост в работе. Этот и Slim - мои любимые.

Мне вообще не нужна полномасштабная структура. Если вам нужна ORM, попробуйте Redbean.

Если вам нужен движок шаблона, используйте Twig.

С помощью этого подхода вы просто установите то, что используете.

Ответ 5

Проверьте Pux (https://github.com/c9s/Pux), который нацелен на чрезвычайно высокую производительность, нулевую зависимость, нулевые служебные данные (с поддержкой расширения C). обеспечивая при этом хорошую производительность, Pux также предоставляет API-интерфейс Sinatra для определения ваших собственных маршрутов маршрутизации:

$mux = new Pux\Mux;
$mux->any('/product', ['ProductController','listAction']);
$mux->get('/product/:id', ['ProductController','itemAction'] , [
    'require' => [ 'id' => '\d+', ],
    'default' => [ 'id' => '1', ]
]);
$mux->post('/product/:id', ['ProductController','updateAction'] , [
    'require' => [ 'id' => '\d+', ],
    'default' => [ 'id' => '1', ]
]);
$mux->delete('/product/:id', ['ProductController','deleteAction'] , [
    'require' => [ 'id' => '\d+', ],
    'default' => [ 'id' => '1', ]
]);
$route = $mux->dispatch('/product/1');

Результат теста:

  • 48,5x быстрее, чем "symfony/routing" при отправке статических маршрутов. (с установленным расширением pux)
  • 31 раз быстрее, чем "symfony/routing" в диспетчеризации регулярных выражений. (с установленным расширением pux)
  • 69x быстрее, чем "klein" (с установленным расширением pux).
n=10000
Runing php array - . 138796.45654569/s
Runing pux - . 124982.98519026/s
Runing klein - . 1801.5070399717/s
Runing ham - . 13566.734991391/s
Runing aura - . 39657.986477172/s
Runing symfony/routing - . 1934.2415677861/s

                     Rate   Mem php array pux aura ham symfony/routing klein
      php array  138.8K/s    0B        ---90% -28% -9%             -1%   -1%
            pux 124.98K/s    0B      111%  -- -31%-10%             -1%   -1%
           aura  39.66K/s    0B      349%315%   ---34%             -4%   -4%
            ham  13.57K/s    0B     1023%921% 292%  --            -14%  -13%
symfony/routing   1.93K/s  786K     7175%6461%2050%701%              --  -93%
          klein    1.8K/s  262K     7704%6937%2201%753%            107%    --


================================== Bar Chart ==================================

        php array  138.8K/s | ████████████████████████████████████████████████████████████  |
              pux 124.98K/s | ██████████████████████████████████████████████████████        |
             aura  39.66K/s | █████████████████                                             |
              ham  13.57K/s | █████                                                         |
  symfony/routing   1.93K/s |                                                               |
            klein    1.8K/s |                                                               |


============================== System Information ==============================

PHP Version: 5.5.6
CPU Brand String: Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz

With XDebug Extension.

Pux пытается не использовать время вычислений для динамического построения всех маршрутов (например, Symfony/Routing). Вместо этого Pux компилирует ваши маршруты в простой массив PHP для кэширования, скомпилированные маршруты могут быть загружены из кеша очень быстро.

С поддержкой Pux PHP Extension вы можете загружать и отправлять маршруты в 1,5 ~ 2x быстрее, чем чистые PHP Pux.