marco476 / routing-manager
以性能为导向的PHP路由管理器
2.0.0
2017-06-13 18:41 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5.0
README
以性能为导向的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数组)的NUMERIC或STRING强表达式。例如
'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