terrydjony / routeria
一个简单、快速且强大的PHP路由器
Requires
- php: >=5.3
- symfony/http-foundation: >=2.0
Requires (Dev)
- phpunit/phpunit: 4.7.*
This package is not auto-updated.
Last update: 2024-09-24 03:38:57 UTC
README
Routeria是一个轻量级且易于使用的路由组件。
安装
使用Composer安装Routeria
composer require terrydjony/routeria ~2.0
使用方法
安装的Routeria及其所有组件位于vendor
文件夹中。
为了使用它,您只需要引入自动加载。
并且,您需要使用use
关键字加载命名空间。
require_once __DIR__ . '/vendor/autoload.php';
配置 (.htaccess)
在使用Routeria之前,您需要启用您的重写引擎并添加规则,以便将任何请求非现有目录或文件名的请求重写到index.php。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
简单的回调路由
对于简单的回调路由,您只需使用属于Routeria
命名空间的Routeria
类。
需要Symfony HttpFoundation的请求组件来告诉路由器请求路径。
use Symfony\Component\HttpFoundation\Request; use Routeria\Routeria; $request = Request::createFromGlobals(); $router = new Routeria; $router->get('/', function() { echo 'Hello World';}); $router->route($request->getPathInfo(), $request->getMethod());
别忘了写行->route($request->getPathInfo(), $request->getMethod());
使其工作
使用命名参数
use Symfony\Component\HttpFoundation\Request; use Routeria\Routeria; $request = Request::createFromGlobals(); $router = new Routeria; $callback = function($fname, $lname) { echo "Hello $fname $lname. Nice to meet ya!"; }; $router->get('/greet/{fname:alpha}/{lname:alpha}', $callback); $router->route($request->getPathInfo(), $request->getMethod());
回调中参数的顺序不重要。
您只需要指定所有必要的变量。
有六个可用的占位符,
INT
用于整数(正则表达式:[0-9]+)
ALPHA
用于字母(正则表达式:[a-zA-Z_-]+)
ALNUM
用于字母数字字符(正则表达式:[a-zA-Z0-9_-]+)
HEX
用于十六进制(正则表达式:[0-9A-F]+)
ALL
用于所有字符(正则表达式:.+)
WORD
是ALPHA
的别名
使用特定HTTP方法进行路由
您也可以轻松地进行其他http方法的路由。 (即使是自定义的)
use Symfony\Component\HttpFoundation\Request; use Routeria\Routeria; $request = Request::createFromGlobals(); $router = new Routeria; $router->get('/', function() { echo 'HTTP METHOD : GET';}); $router->post('/', function() { echo 'HTTP METHOD : POST';}); $router->put('/', function() { echo 'HTTP METHOD : PUT';}); $router->delete('/', function() { echo 'HTTP METHOD : DELETE';}); $router->add('/', function() { echo 'HTTP METHOD : CUSTOM';}, 'CUSTOM'); $router->route($request->getPathInfo(), $request->getMethod());
不同的方法,不同的路由。
分发控制器
您还可以使用Routeria分发控制器。
use Symfony\Component\HttpFoundation\Request; use Routeria\Routeria; class User { public function getInfo($id, $name) { echo 'Hello ' . $name . ' ID: ' . $id; } } $request = Request::createFromGlobals(); $router = new Routeria; $router->get('/user/{name:alpha}/{id:int}', 'User::getInfo'); $router->route($request->getPathInfo(), $request->getMethod());
如果您访问'/user/terry/35',则路由器将分发getInfo方法,并打印'Hello terry ID: 35'。
如果类有命名空间,别忘了指定。
转换参数
use Symfony\Component\HttpFoundation\Request; use Routeria\Routeria; $request = Request::createFromGlobals(); $router = new Routeria; $router->get('/posts/{title:alpha}', function($title) { echo '<h1>'.$title.'</h1>';}) ->convert(function($title) { return ucwords(str_replace('-', ' ', $title)); }); $router->route($request->getPathInfo(), $request->getMethod());
本例中的转换器将标题参数中的所有连字符转换为空格。
因此,如果您访问'/posts/lorem-ipsum-dolor-sit-amet',它将打印 <h1>lorem ipsum dolor sit amet</h1>
。
注意,在回调触发之前,参数'lorem-ipsum-dolor-sit-amet'已被转换为'lorem ipsum dolor sit amet'。
自定义路由集合
您可以通过实现RouteProviderInterface
来定义自己的路由集合。
use Symfony\Component\HttpFoundation\Request; use Routeria\Routeria; use Routeria\RouteCollection; use Routeria\ControllerRoute; use Routeria\RouteProviderInterface; class BlogCollection implements RouteProviderInterface { public function register(RouteCollection $collection) { $blogRoutes = array( 'index' => new ControllerRoute('/','Blog::index','GET'), 'post' => new ControllerRoute('/{id:int}/{title:alnum}','Blog::showPost','GET'), 'page' => new ControllerRoute('/page/{title:alpha}','Blog::showPage','GET') ); $collection->addRoutes($blogRoutes); } } $request = Request::createFromGlobals(); $router = new Routeria; $collection = new BlogCollection; $router->register($collection); $router->route($request->getPathInfo(), $request->getMethod());
您需要一个自己的博客控制器才能使其工作。
为此库做出贡献
请通过将其分支、做出良好的提交然后执行拉取请求来为此项目做出贡献。
感谢您的支持。