eberfreitas/cakephp-power-router

此包已被废弃,不再维护。没有建议的替代包。

为您的蛋糕路由提供丰富的新特性

安装: 380

依赖: 0

建议者: 0

安全: 0

星标: 11

关注者: 2

分支: 1

公开问题: 1

类型:cakephp-plugin

0.1.1 2015-12-14 18:58 UTC

This package is auto-updated.

Last update: 2020-08-24 12:51:17 UTC


README

Build Status Coverage Status

PowerRouter是一个插件,它扩展了默认Router的使用方式。它启用三个新功能

  • 添加命名路由
  • 操作匹配路由的参数
  • 只有当路由符合给定条件时才匹配

要求

  • CakePHP 2.x(在2.4和2.5上测试过,但应该适用于所有2.x版本)
  • PHP 5.3或更高版本(应该适用于5.2,但未进行测试)

安装

使用Composer

将插件添加到项目的composer.json中 - 例如这样

{
    "require": {
        "eberfreitas/cakephp-power-router": "dev-master"
    }
}

由于此插件在自身的composer.json中设置了类型cakephp-plugin,Composer知道将其安装在您的/Plugins目录中,而不是在通常的vendors文件中。建议您将/Plugins/PowerRouter添加到您的.gitignore文件中。为什么?请阅读此内容

手动

GIT子模块

在您的应用目录中键入

git submodule add git://github.com/eberfreitas/cakephp-power-router.git plugins/PowerRouter
git submodule init
git submodule update

GIT Clone

在您的插件目录中键入

git clone git://github.com/eberfreitas/cakephp-power-router.git PowerRouter

使用

PowerRouter是一个自定义路由类,它扩展了CakeRoute。这样,您可以使用它来定义路由并利用其功能。使用它将替换matchparse方法。

match方法用于处理反向路由,而parse用于解析请求。您可以在CakePHP手册上了解更多关于自定义路由类的信息。

为了使用PowerRouter的功能,首先需要在您的app/Config/bootstrap.php中添加以下行以加载插件

CakePlugin::load('PowerRouter');

之后,将库导入到您的"app/Config/routes.php"文件中,如下所示

App::uses('PowerRoute', 'PowerRouter.Lib');

之后,您可以开始定义路由,如下所示

Router::connect(
    '/path',
    array('controller' => 'pages', 'action' => 'view'),
    array(
        'routeClass' => 'PowerRoute',
        'routeName' => 'main-path',
        'callback' => $callback,
        'condition' => $condition
    )
);

但是,如果您计划大量使用PowerRoute,则可以使用助手类PowerRouter来简化新路由的声明。在这种情况下,不要导入'PowerRoute'库,而导入'PowerRouter'库(注意"r")

App::uses('PowerRouter', 'PowerRouter.Lib');

现在您可以这样做

PowerRouter::connect(
    'main-path',
    '/path'
    array('controller' => 'pages', 'action' => 'view'),
    array(
        'callback' => $callback,
        'condition' => $condition
    )
);

以下是PowerRouter::connect方法的描述

PowerRouter::connect($name, $route, $defaults = array(), $options = array()) { /*...*/ }

其中

  • $name是您想要为该路由提供的名称。理想情况下,它应该是一个唯一的标识符
  • $route是您的路由路径,类似于/:controller/:action/:id等,就像常规路由一样
  • $defaults是一个数组,用于描述默认路由参数,就像常规路由中的那样
  • $options与常规路由中的options参数的工作方式相同。在这里,您还可以声明两个新的键:conditioncallback。我们很快就会看看这些。

使用命名路由

因此,您可以使用PowerRouter首先定义命名路由。这将使您在执行任何类型的路由匹配时更容易、更快地匹配路由。让我们看看一个例子

PowerRouter::connect(
    'about',
    '/about-us',
    array('controller' => 'pages', 'action' => 'display', 'about')
);

现在,如果您想在视图中链接到这个页面,您可以这样做

echo $this->Html->link('About us', array('routeName' => 'about'));

这将匹配正确的路由。您还可以组合参数

// In your routes.php

PowerRouter::connect(
    'product-view',
    '/product/:slug/:id',
    array('controller' => 'products', 'action' => 'view')
);

// In your views

echo $this->Html->link(
    $product['Product']['title'],
    array(
        'routeName' => 'product-view',
        'slug' => $product['Product']['slug'],
        'id' => $product['Product']['id']
    )
);

使用回调函数

使用回调函数,您可以在应用使用路由参数之前对其进行操作。当路由被解析时,它返回一个数组,其中包含它将使用的参数,例如匹配的控制器、动作等。使用回调函数,您可以将信息注入或修改到该数组中。回调函数可以是任何is_callable的函数,包括闭包。让我们看看一个例子

// routes.php

$transformRoute = function ($params) {
    $params['action'] = 'dash_' . $params['action'];

    return $params;
};

PowerRouter::connect(
    'route',
    '/dashboard/:controller/:action/*',
    array(),
    array('callback' => $transformRoute)
);

现在,当有人点击/dashboard/user/view/123时,您将“重定向”请求到UserController::dash_view方法。回调函数被执行,实际上改变了该请求所使用的参数。

在回调函数的末尾返回$params变量非常重要,因为这将是应用程序从现在开始使用的。

使用条件回调函数

PowerRouter还启用另一种回调形式,即condition。使用该回调函数,您可以通过在回调函数中定义的条件来阻止路由的使用。函数应该返回一个表示该路由有效性的布尔值。示例

$condition = function () {
    return Configure::read('route') === true;
};

$routes = PowerRouter::connect(
    'test',
    '/findamatch',
    array(
        'controller' => 'main',
        'action' => 'view'
    ), array(
        'condition' => $condition
    )
);

根据route配置键的值,将使用或不会使用test路由。这样,您可以根据给定环境或条件动态调整路由以响应。

或者,您可以通过传递一个回调函数数组来执行,直到其中任何一个函数拒绝访问该路由。

许可证

MIT许可证 (MIT)

版权所有 (c) 2014 Éber Freitas Dias

在此特此授予任何人免费获得此软件及其相关文档副本(“软件”)的权利,用于不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他原因,是否与软件或其使用或其他方式有关。