具有 CakePHP 路由的不同级别的 URL

2024-03-14

我有一个网站需要允许多个 URL 结构。例如:

www.examplesite.com/people/add  // <-- example company
www.otherexample.com/xyz/people/add  // <-- "xyz" company (not location based)
www.otherexample.com/florida/abc/people/add  //<-- "abc" company (location based)

每个 URL 应该能够根据 URL 检测到它是哪家公司。

到目前为止,我已经能够很好地解析出 URL 来确定它是哪家公司,但是如何添加这些额外的内容/florida/abc/路线的一部分以允许应用程序的其余部分工作?

我尝试了很多方法,包括在路由文件顶部将变量设置为“/florida/abc”(或其他任何内容),然后在每个路由之前添加该变量,但这并不能处理每个控制器/行动,似乎非常命中或错过/越野车。

我也用admin前缀,例如,它也需要像这样工作:

www.otherexample.com/admin/florida/abc/people/add

我的假设是我需要使用routes.php文件,但我无法确定如何实现这一点。


我在网络应用程序中使用了这种方法farm.ba http://farm.ba/(不再由所有者维护)。

我做了什么:

  • 创建表“节点”,其中包含字段 id、slug、model、foreign_key、type、..
  • 创建自定义路线(1 http://book.cakephp.org/2.0/en/development/routing.html#custom-route-classes),(2 http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp) 处理 Node 模型的类
  • 保存帖子后,在节点模型中存储和缓存 slug
  • 删除帖子后,删除缓存和节点记录

这与 WordPress 路由非常相似,允许您输入自定义 slug 等。

EDIT:

在 App/Lib/Routing/Router/MultiRoute.php 中创建自定义路由类,如下所示:

<?php
App::uses('CakeRoute', 'Routing/Route');
/**
* MultiRoute
*/
class MultiRoute extends CakeRoute
{

    public function parse($url)
    {
        // debug($url); '/florida/abc/people/add'

        // Add custom params
        $params = array(
            'location' => null,
            'company' => null,
            'controller' => 'peoples',
        );

        $params += parent::parse($url);
        // debug($params);
        /** 
         * array(
         *  'location' => null,
         *  'company' => null,
         *  'controller' => 'peoples',
         *  'named' => array(),
         *  'pass' => array(
         *      (int) 0 => 'florida', // location
         *      (int) 1 => 'abc', //company
         *      (int) 2 => 'people', // controller
         *      (int) 3 => 'add' // action, default index
         *  ),
         *  'action' => 'index',
         *  'plugin' => null
         * )
         * 
         */

        // reverse passed params
        $pass = array_reverse($params['pass']);
        // debug($pass);
        /**
         *  array(
         *      (int) 0 => 'add',
         *      (int) 1 => 'people',
         *      (int) 2 => 'abc',
         *      (int) 3 => 'florida'
         *  )
         */

        if(isset($pass[3])) { $params['location'] = $pass[3]; }
        if(isset($pass[2])) { $params['company'] = $pass[2]; }
        // if you need load model and find by slug, etc...
        return $params;
    }

    public  function match($url)
    {
        // implement your code
        $params = parent::match($url);
        return $params;
    }
}

在routes.php中

App::uses('MultiRoute', 'Lib/Routing/Route');

Router::connect('/admin/*', 
    array('admin' => true),// we set controller name in MultiRoute class
    array('routeClass' => 'MultiRoute')
    );

Router::connect('/*', 
    array(),// we set controller name in MultiRoute class
    array('routeClass' => 'MultiRoute')
    );

在您的控制器中使用额外的请求参数查找结果,例如:

$this->request->location;
$this->request->company;

我希望这是有帮助的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有 CakePHP 路由的不同级别的 URL 的相关文章

  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • CakePHP保存三模型关系关联

    我有以下输出 需要将其插入数据库中 Array Test gt Array Question gt Array 0 gt Array category id gt 3 answer style id gt 2 Answer gt Array
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • 检查 PHP 中“@”字符后面的单词

    我现在正在制作一个新闻和评论系统 但是我已经在一个部分上停留了一段时间了 我希望用户能够在 Twitter 上引用其他玩家的风格 例如 用户名 该脚本看起来像这样 不是真正的 PHP 只是想象脚本 3 string I loved the
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B

随机推荐

  • 在 FFmpeg 中正确分配和填充帧

    我正在填写一个Frame使用 BGR 图像进行编码 但出现内存泄漏 我想我找到了问题的根源 但它似乎是一个库问题 由于 FFmpeg 是一个如此成熟的库 我认为我误用了它 我希望得到指导如何正确地使用它 我正在分配一个Frame using
  • JasperReports 中的印地语字体 [重复]

    这个问题在这里已经有答案了 在印地语字体的内部预览中正确显示 但在 PDF 中情况有所不同 例如 在 Pdf 中显示 怎么解决这个问题 一些字体类型 例如 Arial Unicode MS 将支持特殊字符 例如印地语符号 要解决此问题 请打
  • 如何使用汇编程序从英特尔处理器中获取随机数?

    我需要从处理器 英特尔酷睿 i3 中的英特尔随机生成器获取随机数 我不想使用任何图书馆 我想在 C 中使用汇编程序粘贴 但我不知道应该使用哪些寄存器和指令 呼叫RDRAND支持的 CPU 目前仅 Ivy Bridge 和 Haswell I
  • 如何使用OpenCV找出帧之间的差异?

    在 OpenCV 上运行视频时如何找到帧之间的差异 我需要做一个循环来检查帧与帧之间的更改并将结果显示在另一个窗口中 我可以在此处附加的循环中执行此操作吗 或者还有其他方法可以做到吗 while key x frame cvQueryFra
  • 手动调用 __enter__ 和 __exit__

    我用谷歌搜索过但没有运气 所以让我们想象一下我有MySQL使用的连接器类 enter and exit 函数 最初与with语句 来连接 断开与数据库的连接 让我们有一个使用其中 2 个连接的类 例如用于数据同步 注意 这不是我的现实生活场
  • 如何在 2020/21 年活动中获取 ViewModel 实例?

    我是 mvvm 模式的新手 我为主要活动创建了一个 ViewModel 现在我想在主活动中获取 ViewModel 的实例 Stackoverflow 上的大多数教程和答案都建议使用ViewModelProviders of 但这已被弃用
  • 无法使用 Httprequest 库将图像上传到服务器

    我创建了一个应用程序 用户在其中从图库中选择图像并将该图像上传到服务器 我尝试使用 Httprequest 库执行此操作 但我无法上传它 Code HttpRequest request HttpRequest post https bet
  • Flutter android 版本卡在启动屏幕上

    Flutter android 版本构建卡在启动屏幕上 我尝试过清理项目flutter clean 但它仍然卡在启动屏幕上 我也用过WidgetsFlutterBinding ensureInitialized 在执行之前runApp 它仍
  • 如何在不破坏 Subversion 历史记录的情况下重命名 Java 包?

    我工作的公司正在成立 他们在此过程中更改了名称 所以我们仍然使用包名称 com oldname 因为我们害怕破坏文件更改历史记录 或者版本之间的祖先链接 或者任何我们可能破坏的东西 我不认为我使用了正确的术语 但你明白了这个概念 我们使用
  • 从外部文件获取输入?

    我需要从 C 的外部文件中获取非常基本的输入 我尝试在互联网上搜索几次 但没有任何内容真正适合我的需要 这将是一个输入来自的 txt 文件 其中将填充如下行 131 241 371 481 我已经有代码可以手动获取此输入 它看起来像这样 u
  • GCMIntentService 的 Intent Extras 未传递

    I coded GCMIntentService但打电话Activity无法获得额外费用 Override protected void onMessage Context context Intent intent Intent resu
  • 信息窗口显示在错误的位置

    I have little problem with my webpage When I m trying to show InfoWindow on marker That windows shows on the top left co
  • Google FooBar 挑战显示 Blacklisted_Code 错误 [已关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我今天偶然发现了 Google Foo Bar 挑战 在解决非常简单的第一个问题时 gt 涉及创建字符串中所有素数的串联
  • 不间断睡眠是否是我的Python程序运行速度非常慢的原因(如果是这样,我该如何解决这个问题?)?

    我有以下 select 语句 使用 sqlite3 和 pysqlite 模块 self cursor execute SELECT precursor id FROM MSMS precursor JOIN spectrum ON spe
  • SQL Server 行级安全性 - 多对多

    我们使用 SQL Server 2008 并在 Active Directory AD 中设置权限 核心表中的每一行只能由有权查看每一行的人员查看 我可以在每一行上设置行级安全性 每行包含与 AD 组对齐的单个角色 但是我遇到以下问题 因为
  • 需要单个 SQL 查询[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有两个表如下 companyid name 1 pwc 2 dell 3 microsoft 4 google 5 yahoo 6 tw
  • 如何防止 sqlalchemy 在 select 上创建事务?

    我的问题 我有一个包含多行数据的文件 我想要try将每一行插入我的数据库 但是如果any的行有问题 我需要回滚整个套件和 kaboodle 但我想跟踪实际的错误 所以我可以这样说 而不是仅仅死在第一个有错误的记录上 该文件有 42 个错误
  • 以编程方式添加 CenterX/CenterY 约束

    我有一个 UITableViewController 如果没有任何内容可显示 则不会显示任何部分 我添加了一个标签来向用户表明此代码没有任何内容可显示 label UILabel frame CGRectMake 20 20 250 100
  • Laravel 嵌套预加载并选择

    当我尝试像这样嵌套的预加载时 journal Journal with pages pages articles gt select id titre date gt findOrFail id 这是有效的 但是当我尝试为嵌套关系添加选择以
  • 具有 CakePHP 路由的不同级别的 URL

    我有一个网站需要允许多个 URL 结构 例如 www examplesite com people add lt example company www otherexample com xyz people add lt xyz comp