spiffy/spiffy-routes

该软件包已被废弃且不再维护。没有建议的替代软件包。
该软件包最新版本(dev-master)没有可用的许可信息。

ZF2 模块,它直接在控制器中提供路由注解。

dev-master 2013-06-18 03:34 UTC

This package is not auto-updated.

Last update: 2019-02-20 17:28:56 UTC


README

SpiffyRoutes 是一个模块,旨在通过在控制器/操作本身上提供注解来加快设置路由的速度。SpiffyRoutes 包含了缓存和 CLI 工具,可以在需要时预热/清除缓存。

项目状态

Master Branch Build Status Coverage Status

安装

SpiffyRoutes 的安装使用 composer。有关 composer 文档,请参阅 getcomposer.org

php composer.phar require spiffy/spiffy-routes:dev-master

然后,将 SpiffyRoutes 添加到您的 config/application.config.php

不使用 composer 的安装不受官方支持,并且需要您安装并自动加载 composer.json 中指定的依赖。

支持的注解

以下是当前支持的注解列表。随着更多注解的支持,此列表将得到更新。为了使用注解,您必须先 导入它们。这样做的方法是在代码顶部放置以下内容:

<?php

use SpiffyRoutes\Annotation as Route;

这将允许您使用 @Route 在文档块中使用 SpiffyRoute 的注解。

根注解用于 控制器 级别,并指定应用于控制器内部所有操作的所有路由的前缀。

<?php

use SpiffyRoutes\Annotation as Route;

/**
 * @Route\Root("/my")
 */
class MyController
{
    /**
     * @Route\Literal("/home")
     */
    public function indexAction()
    {
        // ... I resolve to /my/home
    }
}

文本

文本注解映射到文本路由类型。

<?php

use SpiffyRoutes\Annotation as Route;

class MyController
{
    /**
     * @Route\Literal("/home", name="index")
     */
    public function indexAction()
    {
        // ... I resolve to "/home", with name "index"
    }
}

正则表达式

文本注解映射到文本路由类型。

<?php

use SpiffyRoutes\Annotation as Route;

class MyController
{
    /**
     * @Route\Regex("/regex/(?<id>\d+)", spec="/regex/%id%")
     */
    public function indexAction()
    {
        // ... I resolve to "/regex/<someid>"
    }
}

文本注解映射到文本路由类型。

<?php

use SpiffyRoutes\Annotation as Route;

class MyController
{
    /**
     * @Route\Segment("/segment[/:id]", constraints={"id"="\d+"})
     */
    public function indexAction()
    {
        // ... I resolve to "/segment/<someid>", or /segment
    }
}

缓存

由于解析注解所需的反射量很大,因此缓存非常重要。实际上,缓存是 必须 的。但是,您可以在开发期间将缓存适配器设置为 Zend\Cache\Storage\Adapter\Memory,如果希望在每个请求上重建路由器配置。

默认情况下,使用 SpiffyRoutes\Cache 服务启用缓存,这是一个 Zend\Cache\Storage\AdapterFilesystem,其缓存路径设置为 data/spiffy-routes

多个路由

SpiffyRoutes 支持每个索引多个路由。要使用它们,只需向您的操作添加更多注解即可。

<?php

use SpiffyRoutes\Annotation as Route;

class MyController
{
    /**
     * @Route\Regex("/regex/(?<id>\d+)", spec="/regex/%id%")
     * @Route\Segment("/segment[/:id]", constraints={"id"="\d+"})
     */
    public function indexAction()
    {
        // ... I resolve to "/segment/<someid>", or /segment, or /regex/<someid>
    }
}

CLI 工具

提供了一个 CLI 工具来构建和清除缓存。在控制台运行您的 public/index.php 以查看相关信息。

自动路由名称

建议为所有路由指定名称,例如:@Route\Literal("/", name="home")。未指定名称将导致系统根据控制器和操作名的规范版本自动生成路由名称。

例如,如果您已将控制器注册为My\Controller到ControllerManager中,并且正在添加对indexAction的路由,则自动生成的路由名称将是my_controller_index