Есть ли отдельная библиотека маршрутизации PHP?
Я хочу добавить динамическую маршрутизацию REST-esque в приложение PHP. Я бы хотел использовать существующую библиотеку маршрутизации, поэтому мне не нужно изобретать колесо.
Однако, когда я смотрю на такие вещи, как Slim и F3, все они приходят с вещами, которые я не хочу - например, с шаблонами и MVC. Поскольку мне просто нужна маршрутизация, у меня получилось бы много кода рамки в моем приложении, которое мне не нужно.
Есть ли там хорошая библиотека, которая только делает маршрутизацию? Или я застрял в импорте полной структуры или изобретательности колеса?
Ответы
Ответ 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.
Ответ 6
PHP - очень простой маршрутизатор - это действительно хорошо и просто.
PHP - RegexRouter еще лучше, на мой взгляд:)
Ответ 7
Посмотрите класс маршрутизатора литиевой среды, так как сильно использует инъекции зависимостей, вы можете настройте класс Router, вызов config()