我的帖子有以下控制器查看方法:
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并理解它以显示正确的帖子
如果有人能帮助我,我会非常感激。感谢
答案 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) { ... }