slaxweb/router

SlaxWeb/Framework 的路由组件

0.6.0 2017-04-25 19:07 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:08:29 UTC


README

Build Status

路由组件是 SlaxWeb/Framework 的核心组件之一,但也可以单独使用。它依赖于以下组件

路由可以帮助您将传入的请求路由到正确的代码,是现代网络应用中必不可少的组件,特别是那些依赖于单个入口点的应用。使用路由,您控制着您的传入请求如何被处理。

安装

目前只能通过 composer 安装,您需要在 composer.json 文件中添加以下内容

"require": {
    "slaxweb/router": "0.4.*@dev"
},
"minimum-stability": "dev"

使用方法

路由的初始化可能有点复杂,尤其是因为它依赖于另外两个需要单独初始化的组件。因此,路由提供了两种方便的初始化方法,一个工厂和一个服务提供者,如果您使用的是 Pimple 依赖注入容器。

这只是为了让您入门。完整文档将在未来提供。

工厂

工厂提供了静态方法来正确初始化路由,并帮助您将路由定义传递给路由器。此示例未展示如何准备配置组件,该组件是日志记录器组件所必需的。有关此信息,请参阅配置和日志记录器组件。

<?php
use SlaxWeb\Router\Route;
use SlaxWeb\Router\Factory;
use SlaxWeb\Router\Request;
use SlaxWeb\Config\Factory as Config;
use Symfony\Component\HttpFoundation\Response;

require_once "vendor/autoload.php";

$config = Config::init();
// load config, refer to Config component README

// define a route
$route = Factory::newRoute()->set(
    "myUrl",
    Route::METHOD_GET,
    function (Request $request, Response $response) {
        // ...
        $response->setContent("my content");
    }
);
Factory::container($config)->add($route);

// dispatch the request
$response = Factory::response();
Factory::dispatcher($config)->dispatch(Factory::request(), $response);

// and send response to browser
$response->send()

现在,如果您在浏览器中访问 http://yourdomain.com/script.php/myUrl,您应该看到浏览器中的 'my content'。

服务提供者

使用服务提供者与工厂类似,并且可以稍微简化您的操作。

<?php
require_once "vendor/autoload.php";

// init the Pimple Container
$container = new Pimple\Container;

// register services
$container->register(new SlaxWeb\Config\Service\Provider);
$container->register(new SlaxWeb\Logger\Service\Provider);
$container->register(new SlaxWeb\Hooks\Service\Provider);
$container->register(new SlaxWeb\Router\Service\Provider);

// load config, refer to Config component README

// defina a route
$route = $container["router.newRoute"]->set(
    "myUrl",
    Route::METHOD_GET,
    function (Request $request, Response $response) {
        // ...
        $response->setContent("my content");
    }
);
$container["routesContainer.service"]->add($route);

// dispatch the request
$container["routeDispatcher.service"]->dispatch(
    $container["request.service"],
    $container["response.service"]
);

// and send response to browser
$container["response.service"]->send();

再次访问 http://yourdomain.com/script.php/myUrl,您应该再次在浏览器中看到 'my content'。