我的投资组合有以下链接结构:
<?php echo $this->Html->link($post['Portfolio']['title'], array('controller' => 'portfolio', 'action' => 'view', Inflector::slug($post['Portfolio']['title'])), array('title' => $post['Portfolio']['title'])); ?>
其中包含以下网址:http://driz.co.uk/portfolio/view/Paperview_Magazine
但是,如何让我的控制器根据标题显示项目?
到目前为止,我已经拥有了这个,但却无法让它工作,只是得到一个空白页面(所以我还需要检查格式是否正确,并且它们是相关的项目)
function view ( $title )
{
$posts = $this->Portfolio->find('first', array('conditions' => array('Portfolio.title' => $title)
));
if (empty($title))
{
$this->cakeError('error404');
}
$this->set(compact('posts'));
}
答案 0 :(得分:1)
@Ross建议您使用Portfolio.slug进行搜索,以便您可以这样做:
不幸的是,没有办法扭转Inflector :: Slug函数,因为它删除了某些字符,如撇号,引号,括号等,这就是为什么你需要将slug保存到数据库中,如果你想搜索它。
以下是如何在模型中使用beforeSave事件:
public function beforeSave(array $options = array())
{
// If the title is not empty, create/update the slug.
if ( ! empty($this->data[$this->alias]['title'] )
$this->data[$this->alias]['slug'] = Inflector::slug($this->data[$this->alias]['title']);
// Returning true is important otherwise the save or saveAll call will fail.
return true;
}