erlendellingsen / flex-router
一个轻量级的PHP路由器,用于创建干净、RESTful的URL。设置和配置极其简单。
1.0.0-stable
2017-03-07 19:28 UTC
Requires
- php: ^5.3.3 || ^7.0
This package is not auto-updated.
Last update: 2024-09-26 00:32:02 UTC
README
flexRouter
一个非常 小 且 轻量级 的PHP路由器,用于创建干净、RESTful的URL。设置简单,无需配置。简单的路由处理。
支持参数、不同的HTTP方法以及通配符URL。
变更记录
作为新的维护者,我试图实现一个更健壮的架构,同时不偏离路由器的初始目标,即基于if条件控制结构。
随着项目的演变,这可能在将来发生变化。以下是经过重新设计的示例,展示如何在新的、经过单元测试的形式中使用路由器。
安装
composer require erlendellingsen/flex-router
设置
目标服务器上必须启用URL重写。本指南包含如何在Apache服务器上设置它的示例。如果您有IIS、Nginx或其他示例,请考虑贡献!
Apache
配置
- 必须启用Apache模块
mod_rewrite
。 - 必需的Apache-vhost/Directory设置
AllowOverride all
.htaccess文件
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ index.php?path=$1 [NC,L,QSA]
非Apache
您必须以某种方式在您的Web服务器/目录中启用URL重写,以便将所有请求指向 index.php?path=x
。如果您有想法但需要帮助,请不要犹豫,联系我。
如果您有其他Web服务器的示例,请考虑与我联系。(打开一个问题、创建一个分支,或者直接给我发邮件)。贡献将非常受赞赏 ☺️
使用
下面的示例演示了如何设置 flexRouter。
<?php // Load the namespaces use FlexRouter\FlexRouter; use FlexRouter\Utilities\FlexResolver; // Load in composer's autoloader require_once 'vendor/autoload.php'; // Create a new router instance $router = new FlexRouter(); /* Register your routes Register Method | Request Method | Route | Route Id */ $router->registerRoute('GET', '/', 'homepage'); // Can pass single method $router->registerRoute(['GET', 'POST'], '/test', 'test'); // Or an array of methods $router->registerRoute('GET', '/test/:id/post', 'param'); // You can create URL params $router->registerRoute('GET', '/asdf*', 'wildcard'); // Or Wildcard Params // Create your resolver $requestMethod = $_SERVER['REQUEST_METHOD']; // Can be attained from either globals or request object $requestUri = $_SERVER['REQUEST_URI']; // Can be attained from either globals or request object $resolver = new FlexResolver($requestMethod, $requestUri, $router); // Start resolving your routes in whatever way you would like, if ($resolver->resolve('homepage')) { echo 'The homepage route was found'; return; } if ($resolver->resolve('test')) { echo 'The nested test route was found'; return; } if ($resolver->resolve('param')) { echo "The param test route was found\r\n"; echo $resolver->access()->params('url', 'id'); return; } if ($resolver->resolve('wildcard')) { echo 'The wildcard test route was found'; return; } // This is the 404 catch all $resolver->notFound(function () { echo 'Nothing found'; return; });
贡献
想要贡献?太好了!贡献非常受赞赏。在这个项目中有很多事情可以做,但我没有时间全部完成。(至少不是全部)。
急需贡献的领域
- 编写文档(如果需要帮助,请联系我!)
- 制作更好的README
- 创建测试
- 改进异常处理
- 更好地处理 GET/POST(支持DELETE、PUT等)。
可能还有更多。
许可证
MIT 版权所有 Erlend Ellingsen 2017。见 LICENSE。