CakePHP:如何获取与 slug 匹配的行的 ID?

Posted

技术标签:

【中文标题】CakePHP:如何获取与 slug 匹配的行的 ID?【英文标题】:CakePHP: How to get ID for a row that matches slug? 【发布时间】:2011-07-14 19:49:02 【问题描述】:

我有一个名为 Posts 的模型,其中包含一个名为 slug 的字段。我想创建一个路由功能来基本上做到这一点:www.mysite.com/slug。所以,我创建了一个在 routes.php 文件中使用的 Slug 类,看起来像这样,但它并没有像我想要的那样工作:

class SlugRoute extends CakeRoute 

   function match($url) 
   
        App::import('Model', 'Post');
        $Post = new Post();
        $Post->find('first', array('conditions' => array('Post.slug' == $url)));
        $id = $Post['id'];
        return $id;
   

这是我在 routes.php 文件中的代码行:

Router::connect('/:slug', array('controller' => 'posts', 'action' => 'view'), array('routeClass' => 'SlugRoute'));

我要做的就是在我的帖子上执行搜索,以将 URL 中的输入 slug 与我数据库中的内容匹配,然后返回 ID 并自动链接到该 ID。

我做错了什么?提前致谢!!

【问题讨论】:

【参考方案1】:

我发现这个示例与您正在做的事情完全相同,但使用parse 方法而不是match 方法。看看:http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp

【讨论】:

我试过了,问作者为什么不行。不幸的是,它没有,但感谢您的帮助。【参考方案2】:

试试这个

$Post = new Post();
    $data = $Post->find('first', array('conditions' => array('Post.slug' => $url)));
    $id = $data['Post']['id'];

【讨论】:

@shota,我也试过了。这可能是正确的语法,但它也不起作用。 启用调试模式,您将看到生成了什么 SQL。这将有助于找出不正确的地方。 您收到任何错误吗?将该 SQL 复制到您的 phpmyadmin 中,看看它是否返回您需要的行 @shota,我尝试了您的新代码并收到以下错误:array_merge() [function.array-merge]: Argument #1 is not an array [CORE\cake\dispatcher.php, line 267]Undefined index: controller [CORE\cake\dispatcher.php, line 121] 和以下“缺少控制器”错误:Error: Controller could not be found. SQL 似乎几乎正确,但有一个斜线在那里:选择Post.idPost.slugPost.titlePost.bodyPost.created5.created56 @ FROM posts AS Post WHERE Post.slug = '/about' LIMIT 1

以上是关于CakePHP:如何获取与 slug 匹配的行的 ID?的主要内容,如果未能解决你的问题,请参考以下文章

Python/postgres/psycopg2:获取刚刚插入的行的 ID

CakePHP - 如何使用 slug 进行反向路由?

如何获取与正则表达式匹配的第一行之后的文件部分

s-s-rS - 用于计算当前日期匹配或(参数选择日期)与其他一些等效列的行的表达式

更改加密 cakephp 脚本的 url slug

从文件中读取索引“n”低于与给定正则表达式匹配的行的所有行