marco476/routing-manager

以性能为导向的PHP路由管理器

2.0.0 2017-06-13 18:41 UTC

This package is not auto-updated.

Last update: 2024-09-29 02:18:38 UTC


README

Build Status Packagist Code Climate Issue Count PHP Version Packagist

以性能为导向的PHP路由管理器

此库是PHP 性能为导向的路由管理器,与通过以下方式设置的路线一起工作:

  • PHP数组
  • YAML文件
  • XML文件

安装

您可以使用Composer安装它

composer require marco476/routing-manager

用法

使用routing-manager库非常简单。所有设置的路线都必须包含一个用于与URI匹配的表达式键/标签。

当您调用matchRoute方法时,库会在设置的路线和当前的URI之间寻找匹配。如果与URI匹配,则返回匹配的路线数组;如果不匹配,则返回false

数组

以下是一个使用数组的示例

<?php
require_once "/vendor/autoload.php";
use Routing\Routing;

$Routing = new Routing();

$Routing->setRoutes(array(
    'homepage' => array( //Name route
        'expression'     => '/', //MUST DEFINE!
        'controller'=> 'MyController',
        'action'    => 'MyAction',
        'extra1'    => 'extra1',
        'extra2'    => 'extra2'
    )
));

if ($routeMatch = $Routing->matchRoute()) {
    echo "See that" . "<br>";
    var_dump($routeMatch);
} else {
    echo "mmm.. what's wrong?";
}

YML

以下是一个使用YML的示例

<?php
require_once "/vendor/autoload.php";
use Routing\Routing;

$Routing = new Routing();

$Routing->setRoutesFromYml(__DIR__, 'routes.yml');

if ($routeMatch = $Routing->matchRoute()) {
    echo "See that" . "<br>";
    var_dump($routeMatch);
} else {
    echo "mmm.. what's wrong?";
}

以下是一个YML路由配置文件

homepage: #Name route
    expression: "/" #MUST DEFINE!
    controller: "MyController"
    action:     "MyAction"
    params:     ["myFirstParameter", "sendMe"]

注意:如果您想使用YAML文件进行路由配置,您必须安装yaml php扩展。您可以使用sudo apt-get install php-yaml或使用PECL安装它。更多详情,请查看此处

XML

以下是一个使用XML的示例

<?php
require_once "/vendor/autoload.php";
use Routing\Routing;

$Routing = new Routing();

$Routing->setRoutesFromXml(__DIR__, 'routes.xml');

if ($routeMatch = $Routing->matchRoute()) {
    echo "See that" . "<br>";
    var_dump($routeMatch);
} else {
    echo "mmm.. what's wrong?";
}

以下是一个XML路由配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <node>
    <expression>/</expression>
    <controller>MyController</controller>
    <action>MyAction</action>
    <extra>Hello</extra>
  </node>
  <node>
    <expression>/contacts</expression>
    <controller>MyController2</controller>
    <params>Hello1</params>
    <extra>
      <name>Marco</name>
      <surname>Cante</surname>
    </extra>
  </node>
</root>

注意:如果您想使用XML文件进行路由配置,您必须安装libxml php扩展。您可以查看此处

通配符

通配符是一个插入到{}中的名称(例如{idUser})。您可以在表达式键/标签中设置通配符,并为每个通配符设置一个要求数组键/标签(请参见下面的示例)。

如果通配符没有要求数组,它可以匹配任何内容。例如

'expression'    => '/{myName}'

它可以匹配任何内容

  • /marco
  • /123
  • /marco123

如果通配符有要求数组,您可以使用自定义正则表达式或ExpressionRoute静态常量(仅适用于PHP数组)的NUMERICSTRING强表达式。例如

'expression'    => '/{myName}',
'requirements'  => array(
    'myName'  => ExpressionRoute::STRING
    )

它可以匹配

  • /marco
  • /wellName

但不能匹配

  • /123
  • /marco123

以及使用自定义正则表达式

'expression'    => '/{myName}',
'requirements'  => array(
    'myName'  => (marco|luigi)
    )

它可以匹配

  • /marco
  • /luigi

并且只能匹配这些!请参见下面的示例

数组中的通配符

以下是一个使用数组的示例

<?php
//Into web/index.php.
require_once __DIR__ . '/../vendor/autoload.php';
use Helper\ExpressionRoute;

$Routing = new Routing();

$Routing->setRoutes(array(
    'homepage' => array(
        'expression'    => '/{wildcard}/{wildcard2}',
        'requirements'  => array(
            'wildcard'  => ExpressionRoute::NUMERIC,
            'wildcard2' => '(hello|bye)'
            ),
        'controller'    => 'MyController',
        'action'        => 'MyAction',
        'extra1'        => 'extra1',
    )
));

if ($routeMatch = $Routing->matchRoute()) {
    echo "See my data!";
    var_dump($routeMatch);
} else {
    echo "mmm.. what's wrong?";
}

YML中的通配符

以下是一个使用YML的示例

homepage: 
    expression:   "/{test}"
    requirements:
        test:     "[a-zA-Z]+"
    controller:   "IndexController"
    action:       "showHomeAction"
    params:       ["myFirstParameter", "sendMe"]

XML中的通配符

以下是一个使用XML的示例

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <node>
    <expression>/{test}</expression>
    <requirements>
      <test>(marco|luigi)</test>
    </requirements>
    <controller>MyController</controller>
    <action>MyAction</action>
  </node>
</root>

单元测试

您可以从文档根目录使用以下命令运行单元测试

vendor/bin/phpunit