darling / roady-routing-utilities
为 Roady php 框架提供的路由实用工具。
v1.0.6
2024-02-25 22:55 UTC
Requires
- php: ^8.1
- darling/php-darling-dev-tools: ^1.0
- darling/php-file-system-paths: ^1.0
- darling/php-text-types: ^1.1
- darling/php-unit-test-utilities: ^1.0
- darling/php-web-paths: ^1.0
- darling/roady-module-utilities: ^1.0
- darling/roady-routes: ^1.0
Requires (Dev)
README
The RoadyRoutingUtilities 库提供了处理 Roady php
框架路由的类。
尽管它被设计用于与 Roady php
框架一起使用,但这个库也可以独立使用。
安装
composer require darling/roady-routing-utilities
类
Darling\RoadyRoutingUtilities\classes\requests\Request
一个请求代表了对服务器的请求。
请求有一个名称和一个 URL。
请求的名称将基于分配给请求 URL 的 request
查询参数的值、$_POST['request']
的值或 $_GET['request']
的值。
如果 URL 没有分配名为 request
的查询参数,并且 neither $_POST['request']
或 $_GET['request']
被设置,则请求的名称将为 homepage
。
注意:如果设置了 URL 的请求查询参数,则始终优先考虑它,然后是 $_POST['request']
,然后是 $_GET['request']
。
示例
要定义表示对服务器当前请求的请求,请实例化一个新的请求而不带任何参数
$currentRequest = new \Darling\RoadyRoutingUtilities\classes\requests\Request();
要定义表示对服务器特定请求的请求,可以传递一个可选的 URL 字符串,例如 http://example.com:8080?query#fragment
,作为新请求的 __construct
方法的参数。
例如
$specificRequest = new \Darling\RoadyRoutingUtilities\classes\requests\Request( 'http://www.example.com:8080/path?query#fragment' );
Darling\RoadyRoutingUtilities\classes\responses\Response
响应代表请求与应针对该请求提供的一组路由之间的关系。
示例
要为对服务器的特定请求定义响应
$specificRequest = new \Darling\RoadyRoutingUtilities\classes\requests\Request( 'http://www.example.com:8080/path?query#fragment' ); $routeCollection = new \Darling\RoadyRoutes\classes\collections\RouteCollection( new \Darling\RoadyRoutes\classes\routes\Route( moduleName: new \Darling\PHPTextTypes\classes\strings\Name( new \Darling\PHPTextTypes\classes\strings\Text('hello-world'), ), // Names of the Requests this Route should be served in response to. nameCollection: new \Darling\PHPTextTypes\classes\collections\NameCollection( new \Darling\PHPTextTypes\classes\strings\Name( new \Darling\PHPTextTypes\classes\strings\Text('homepage'), ), ), // Named positions where this Routes output should be rendered by Roady's UI. namedPositionCollection: new \Darling\RoadyRoutes\classes\collections\NamedPositionCollection( new \Darling\RoadyRoutes\classes\identifiers\NamedPosition( new \Darling\RoadyRoutes\classes\identifiers\PositionName( new \Darling\PHPTextTypes\classes\strings\Name( new \Darling\PHPTextTypes\classes\strings\Text('TargetPositionName'), ) ), new \Darling\RoadyRoutes\classes\settings\Position(0), ), ), // RelativePath to this Routes output file. relativePath: new \Darling\RoadyRoutes\classes\paths\RelativePath( new \Darling\PHPTextTypes\classes\collections\SafeTextCollection( new SafeText(new \Darling\PHPTextTypes\classes\strings\Text('output')), new SafeText(new \Darling\PHPTextTypes\classes\strings\Text('homepage.html')), ) ), ), ); $response = new Darling\RoadyRoutingUtilities\classes\responses\Response( $specificRequest, $routeCollection );
Darling\RoadyRoutingUtilities\classes\routers\Router
路由器可以接受一个请求并返回针对该请求的适当响应。
示例
$specificRequest = new \Darling\RoadyRoutingUtilities\classes\requests\Request( 'http://www.example.com:8080/path?query#fragment' ); $router = new \Darling\RoadyRoutingUtilities\classes\routers\Router( new \Darling\RoadyModuleUtilities\classes\directory\listings\ListingOfDirectoryOfRoadyModules( new \Darling\RoadyModuleUtilities\classes\paths\PathToDirectoryOfRoadyModules( new \Darling\PHPFileSystemPaths\classes\paths\PathToExistingDirectory( new \Darling\PHPTextTypes\classes\collections\SafeTextCollection( new \Darling\PHPTextTypes\classes\strings\SafeText( new \Darling\PHPTextTypes\classes\strings\Text('path'), ), new \Darling\PHPTextTypes\classes\strings\SafeText( new \Darling\PHPTextTypes\classes\strings\Text('to'), ), new \Darling\PHPTextTypes\classes\strings\SafeText( new \Darling\PHPTextTypes\classes\strings\Text('directory'), ), new \Darling\PHPTextTypes\classes\strings\SafeText( new \Darling\PHPTextTypes\classes\strings\Text('of'), ), new \Darling\PHPTextTypes\classes\strings\SafeText( new \Darling\PHPTextTypes\classes\strings\Text('roady'), ), new \Darling\PHPTextTypes\classes\strings\SafeText( new \Darling\PHPTextTypes\classes\strings\Text('modules'), ), ) ), ), ), new \Darling\RoadyModuleUtilities\classes\determinators\ModuleCSSRouteDeterminator(), new \Darling\RoadyModuleUtilities\classes\determinators\ModuleJSRouteDeterminator(), new \Darling\RoadyModuleUtilities\classes\determinators\ModuleOutputRouteDeterminator(), new \Darling\RoadyModuleUtilities\classes\determinators\RoadyModuleFileSystemPathDeterminator(), new \Darling\RoadyModuleUtilities\classes\configuration\ModuleRoutesJsonConfigurationReader(), ); $response = $router->handleRequest($specificRequest);
作为最终示例,以下是从 Roady 的 index.php
的代码片段,展示了请求、响应和路由器在实际中的应用。
$currentRequest = new Request(); $roadyModuleFileSystemPathDeterminator = new RoadyModuleFileSystemPathDeterminator(); $router = new Router( new ListingOfDirectoryOfRoadyModules( RoadyAPI::pathToDirectoryOfRoadyModules() ), new ModuleCSSRouteDeterminator(), new ModuleJSRouteDeterminator(), new ModuleOutputRouteDeterminator(), $roadyModuleFileSystemPathDeterminator, new ModuleRoutesJsonConfigurationReader(), ); $response = $router->handleRequest($currentRequest); $roadyUI = new RoadyUI( RoadyAPI::pathToDirectoryOfRoadyModules(), new RouteCollectionSorter(), $roadyModuleFileSystemPathDeterminator, ); echo $roadyUI->render($response);