Intereting Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://github.com/nikic/FastRoute

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

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

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

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

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

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

Проверьте 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-> отправка ('/ product / 1');

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

  • 48,5x быстрее, чем «symfony / routing» при отправке статических маршрутов. (с установленным расширением pux)
  • 31 раз быстрее, чем «symfony / routing» в диспетчеризации регулярных выражений. (с установленным расширением pux)
  • 69x быстрее, чем «klein» (с установленным расширением pux).
 п = 10000
 Выполнение php-массива.  138796.45654569 / с
 Управление пуком.  124982.98519026 / с
 Бегущий Клейн -.  1801.5070399717 / с
 Бегущая ветчина.  13566.734991391 / с
 Руническая аура -.  39657.986477172 / с
 Выполнение symfony / routing -.  1934.2415677861 / с

                      Оценить 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%
            аура 39,66K / с 0B 349% 315% --- 34% -4% -4%
             ветчина 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% -


 ================================================================================================================================================================================================================= ====================

         php array 138.8K / s |  ██████████████████████████████████████████████████ ██████████ |
               pux 124.98K / s |  ██████████████████████████████████████████████████ ████ |
              аура 39.66K / s |  █████████████████ |
               ветчина 13.57K / s |  █████ |
   symfony / routing 1.93K / s |  |
             klein 1.8K / s |  |


 ======================== Информация о системе ================== ============

 Версия PHP: 5.5.6
 Марка процессора: Intel (R) Core (TM) i5-3427U CPU @ 1.80GHz

 С расширением XDebug.

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

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

PHP – очень простой маршрутизатор – это действительно хорошо и просто.
PHP – RegexRouter еще лучше на мой взгляд 🙂

Взгляните на класс Router литиевого фреймворка , так как для интенсивного использования инъекций зависимостей вы можете настроить класс Router, вызвав config()