josegonzalez/cakephp-dynamic-route

为 cakephp 自动生成数据库支持的动态路由

安装: 10

依赖: 0

建议者: 0

安全: 0

星标: 12

关注者: 5

分支: 3

开放问题: 1

类型:cakephp-plugin

dev-master 2015-11-29 12:24 UTC

This package is auto-updated.

Last update: 2024-08-29 04:19:52 UTC


README

Build Status Coverage Status Total Downloads Latest Stable Version Documentation Status Gratipay

DynamicRoute 插件(适用于 CakePHP 2.0)

快速方便地从数据库中读取路由到 routes.php

背景

正如我构建的其他路由类一样,有人在IRC上问我是否可以从数据库中读取路由并动态加载到app/Config/routes.php文件中。我决定这是可行的,这就是结果。

要求

  • PHP 5.2+
  • CakePHP 2.0

安装

[使用 Composer]

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

{
    "require": {
        "josegonzalez/cakephp-dynamic-route": "1.0.0"
    }
}

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

[手动]

[GIT Submodule]

在您的应用目录中输入:

git submodule add git://github.com/josegonzalez/cakephp-dynamic-route.git Plugin/DynamicRoute
git submodule init
git submodule update

[GIT Clone]

在您的插件目录中输入:

git clone git://github.com/josegonzalez/cakephp-dynamic-route.git DynamicRoute

启用插件

在 2.0 中,您需要在 app/Config/bootstrap.php 文件中启用插件

    CakePlugin::load('DynamicRoute');

如果您已经使用了 CakePlugin::loadAll();,则此步骤不是必需的。

用法

在您的 app/Config/routes.php 文件底部附近,在加载默认路由的行之前,添加以下内容:

App::uses('FancyRoute', 'DynamicRoute.Lib');
FancyRoute::connectFancyRoutes();

您现在可以从您的 app/Config/routes.php 文件中删除所有其他 hack

我们启用的是在数据库中创建 spec|slug 路由。一个 spec 将是 CakePHP 内部映射,如 posts/view?id=45events/calendar?date=2011-11-01&category=lol,而相应的 slugs 可能是类似 /why-isnt-this-pup-asleep/manchester/cakephp-developers-dance-to-beyonce 的事物。

spec|slug 系统允许在需要时跨多个模型和控制器使用专门的表来处理路由 - 默认为 dynamic_routes 表。它允许开发者为非开发者创建一个简单界面来构建内部应用程序路由,这些路由可以在以后使用。这对于构建需要 Joomla 或 Wordpress 类似路由系统的内容管理系统非常有用。

选项

FancyRoute::connectFancyRoutes() 接受一个可选数组来配置路由加载

  • model: 字符串或对象,引用要用于加载记录的 CakePHP 模型。
    • 默认:(string) DynamicRoute.DynamicRoute
    • 注意:要加载的模型必须有一个返回 spec 到 slug 映射的 load 自定义查找方法
  • cacheKey: 用于将动态路由缓存在磁盘上的键
    • 默认:(string) dynamic_routes
  • cache: 是否缓存数据库查询
    • 默认:(boolean) true

注意

由于此类的工作方式,对于任何动态路由,无需调用 Router::connect(),因为这是由 FancyRoute 类内部调用的。

DynamicRoute 模型包含将给定规范转换为内部 cakephp 请求的方法,无论是字符串还是数组。

您目前必须自己创建有效的 spec|slug 记录。Slugs 应该以 / 字符开头,但不应该以它结尾。Specs 是常规网络请求,$_GET 样式。

DynamicRoute 模型上有一个名为 saveNew() 的辅助方法;此方法接受一个 specslug,或数据数组,并返回保存是否成功。它还将尽可能确保数据被正确设置,通过规范化规范并确保 slug 格式正确。

待办事项

  • 单元测试
  • 创建新动态路由的后端 UI
  • 创建新动态路由的辅助模型方法
  • 移植到 2.0

许可证

版权所有 (c) 2011 Jose Diaz-Gonzalez

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

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

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