obscure-code / router
PHP 路由器
1.5
2023-09-29 19:36 UTC
Requires
- php: >=8.0
Requires (Dev)
- mockery/mockery: ~1.6
- phpstan/phpstan: ~1.10
- phpunit/phpunit: ~10.3
- slevomat/coding-standard: ~8.13
- squizlabs/php_codesniffer: ~3.7
- vimeo/psalm: ~5.15
README
- PHP >= 8.0
- Composer
安装
$ composer require obscure-code/router
基本使用
创建路由器类
use ObscureCode\Router as AbstractRouter; class Router extends AbstractRouter { public function patternDefault(string $path): void { $this->load('header'); $this->load($path); $this->load('footer'); } public function patternBlank(string $path): void { $this->load($path); } public function patternError(string $path): void { http_response_code(404); $this->load('header'); $this->load('error'); $this->load('footer'); } };
创建配置
$config = [ "index" => [ "pattern" => "default", ], "ajax" => [ "pattern" => "blank", ], "directory" => [ "index" => [ "pattern" => "default", ], ], "error" => [ "pattern" => "error", ], ];
使用根目录和配置创建路由器实例
$router = new Router( __DIR__ . '/include', $config, );
示例
// Call /include/index.php by default $router->call('/'); // Call /include/directory/index.php $router->call('/directory/index'); // If /include/a/b.php route exists, ['c', 'd', 'e'] will passed in $params // If only /include/a.php exists, ['b', 'c', 'd', 'e'] will passed in $params $router->call('/a/b/c/d/e'); // ['data'] will passed in $data $router->call('/index', ['data']);
您也可以在 load
方法中传递数据
public function patternDefault(string $path): void { $someClass = new SomeClass(); $this->load('header'); $this->load($path, ['someClass' => $someClass]); $this->load('footer'); }
如果配置中没有找到路由,将抛出 NotFoundException
。因此,您可以使用路由器如下
use ObscureCode\Exceptions\NotFoundException; try { ob_start(); $router->call($route); } catch (NotFoundException $exception) { ob_clean(); $router->call('error'); } catch (SomeOtherException $exception) { // do something } finally { ob_end_flush(); }
如果配置中存在路由,但模式或文件不存在,将抛出 LogicException
。
您可以在 这里 看到一个样板应用的示例。
本地开发
docker build --tag router .
docker run --detach -v "$(pwd):/app" --name=router router
docker exec -it router /bin/bash
composer install
composer tests
composer cs
composer stan
composer psalm