terrydjony/routeria

一个简单、快速且强大的PHP路由器

2.0.0 2016-06-02 15:30 UTC

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 用于所有字符(正则表达式:.+)
WORDALPHA的别名

使用特定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());

您需要一个自己的博客控制器才能使其工作。

为此库做出贡献

请通过将其分支、做出良好的提交然后执行拉取请求来为此项目做出贡献。
感谢您的支持。