CakePHP:使用Tiny库创建永久链接

时间:2011-06-12 20:13:18

标签: php cakephp

我的帖子有以下控制器查看方法:

function view($id = null)
{
    $this->Portfolio->id = $id;
    $this->set('posts', $this->Portfolio->read());
}

所以目前我将ID传递给视图并显示一个帖子,例如/portfolio/view/1

但是我想在这里使用Tiny Lib:https://github.com/kylebragger/tiny/blob/master/tiny.php

我正在使用0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

我想创建的网址是driz.co.uk/portfolio/view/8az/Paperview_Magazine

所以基本上8az部分是Tiny将数值与数据库中的ID进行比较的地方

我创建了一个测试链接,例如<?php echo $this->Html->link($post['Portfolio']['title'], array('controller' => 'portfolio', 'action' => 'view', Inflector::slug($post['Portfolio']['title'])), array('title' => $post['Portfolio']['title'])); ?>但是没有添加Tiny部分,只是添加了变形的帖子标题。

我已经猜到了这样的事情:

function view ( $tiny_id )  
{
    $id = $this->Tiny->reverseTiny($tiny_id);

    $post = $this->Portfolio->id = $id;

    $this->set('post', $this->Portfolio->read());
}

但我坚持以下几点:

1.。)如何将Tiny值添加到我的链接,这样我就可以将它传递给控制器​​/视图,因为目前我只是传递了变形的URL而不是帖子ID或小ID

2.。)如何在我的方法中使用lib并理解它以显示正确的帖子

如果有人能帮助我,我会非常感激。感谢

1 个答案:

答案 0 :(得分:1)

首先,要在控制器中加载Tiny库,您必须使用App :: import。我建议您在供应商文件夹中复制Tiny库,然后在视图操作中使用以下内容:

App::import('Vendor', 'tiny');

确保名为tiny.php的文件位于vendors文件夹中,否则将无效。

要生成链接,您应该可以使用:

echo $this->Html->link($post['Portfolio']['title'], array('controller' => 'portfolio', 'action' => 'view', Tiny::toTiny($post['Portfolio']['id']), Inflector::slug($post['Portfolio']['title'])), array('title' => $post['Portfolio']['title']));

要阅读帖子,请执行以下操作:

$this->Postfolio->read(null, Tiny::reverseTiny($id));

我在reverseTiny调用中使用$ id而不是像上面发布的$ tiny_id的原因是因为“view”操作需要第一个参数是$ id(这是一个很小的id。)第二个参数,将是slug,你的功能没有明确声明。您可能希望将功能更改为:

public function view($id, $slug) { ... }