教你利用composer实现路由加载

1. 什么是composer?

Composer是PHP中依赖管理工具。它最初的目标是为PHP开发者提供一个方便的依赖安装和版本控制的方式,因此它被广泛应用于PHP项目中。

2. composer如何实现路由加载?

路由是Web应用程序中的一个关键概念,它定义了不同的URL请求应该由哪些代码处理。为了实现路由控制,我们需要一个路由器,即一个能够根据请求URL确定要执行哪个控制器和方法的工具。在composer中,我们可以使用各种不同的PHP路由器。

2.1 基于FastRoute实现的路由器

FastRoute 是一个快速的php路由器,提供了简单但高效的请求路由方式,可用于组织你的Web应用程序中的所有请求。使用 FastRoute,你可以将 URL 请求映射到类似于控制器和方法或者回调函数的处理程序,以供后续处理。

使用composer安装 FastRoute:

composer require nikic/fast-route

FastRoute 关键类路由配置:


/**

* 定义路由规则

*/

$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {

$r->addRoute('GET', '/users/{id:\d+}', 'get_user_handler');

$r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler');

$r->addRoute('GET', '/', 'home_handler');

$r->addRoute('GET', '/test', 'test_handler');

});

/**

* url分发

*/

$httpMethod = $_SERVER['REQUEST_METHOD'];

$uri = $_SERVER['REQUEST_URI'];

$routeInfo = $dispatcher->dispatch($httpMethod, $uri);

switch ($routeInfo[0]) {

case FastRoute\Dispatcher::NOT_FOUND:

// ... 404 Not Found

break;

case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:

$allowedMethods = $routeInfo[1];

// ... 405 Method Not Allowed

break;

case FastRoute\Dispatcher::FOUND:

$handler = $routeInfo[1];

$vars = $routeInfo[2];

// ... call $handler with $vars

break;

}

2.2 基于Symfony Routing组件实现的路由器

除了 FastRoute 外, Symfony 路由组件也是一个功能完备的路由器。相比于 FastRoute,Symfony Routing 组件提供了更完善的功能,如中间件支持、路由缓存等。

使用composer安装 Symfony Routing 组件:

composer require symfony/routing

Symfony Routing 组件关键类路由配置:


use Symfony\Component\Routing\Route;

use Symfony\Component\Routing\RouteCollection;

$routes = new RouteCollection();

$routes->add('article', new Route('/articles/{slug}'));

$routes->add('comment', new Route('/articles/{slug}/comments/{id}'));

$context = new RequestContext('/');

$matcher = new UrlMatcher($routes, $context);

$parameters = $matcher->match('/articles/some-article');

print_r($parameters);

3. 如何在项目中使用composer安装的路由器?

在项目中使用composer安装的路由器非常简单。将路由器安装到项目中后,只需要在项目中加载路由器并按照路由器提供的方式配置路由即可。

下面以使用FastRoute为例:

首先,通过composer引入依赖:

composer require nikic/fast-route

路由配置:


use FastRoute\RouteCollector;

use FastRoute\Dispatcher;

$dispatcher = FastRoute\simpleDispatcher(function(RouteCollector $r) {

$r->addRoute('GET', '/users/{id:\d+}', 'get_user_handler');

$r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler');

$r->addRoute('GET', '/', 'home_handler');

$r->addRoute('GET', '/test', 'test_handler');

});

$httpMethod = $_SERVER['REQUEST_METHOD'];

$uri = $_SERVER['REQUEST_URI'];

$routeInfo = $dispatcher->dispatch($httpMethod, $uri);

switch ($routeInfo[0]) {

case Dispatcher::NOT_FOUND:

// ... 404 Not Found

break;

case Dispatcher::METHOD_NOT_ALLOWED:

$allowedMethods = $routeInfo[1];

// ... 405 Method Not Allowed

break;

case Dispatcher::FOUND:

$handler = $routeInfo[1];

$vars = $routeInfo[2];

// ... call $handler with $vars

break;

}

在上面的示例中,使用simpleDispatcher方法定义了路由配置,通过调用该方法,可以返回实现了Dispatcher接口的路由分配器实例。然后,我们将HTTP方法和URI分配给该实例,并调用其dispatch方法来尝试匹配当前请求。最后,根据返回的路由信息执行相应的处理程序。

4. 总结

在本文中,我们介绍了composer及其如何实现路由加载。我们了解到,composer是目前为止最受欢迎的PHP依赖管理工具之一,它可以方便地安装PHP应用程序的依赖项,并且非常适合管理各种不同的PHP项目。同时,我们还学习了如何安装和使用PHP路由器,特别是使用FastRoute路由器,以便为我们的Web应用程序提供路由控制。