首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用帖子标题作为url的CakePHP视图方法

使用帖子标题作为url的CakePHP视图方法
EN

Stack Overflow用户
提问于 2011-06-13 02:53:33
回答 1查看 581关注 0票数 0

我的作品集有以下链接结构:

代码语言:javascript
复制
<?php echo $this->Html->link($post['Portfolio']['title'], array('controller' => 'portfolio', 'action' => 'view', Inflector::slug($post['Portfolio']['title'])), array('title' => $post['Portfolio']['title'])); ?>

它给出的urls如下:http://driz.co.uk/portfolio/view/Paperview_Magazine

但是,如何让我的控制器根据标题显示项目呢?

到目前为止,我已经有了这个,但还没能让它工作,只能得到一个空白页面(所以我还需要检查格式是否正确,以及它们是否是相关的项目)

代码语言:javascript
复制
function view ( $title )
{

    $posts = $this->Portfolio->find('first', array('conditions' => array('Portfolio.title' => $title)
    ));

    if (empty($title))
    {
        $this->cakeError('error404');
    }
    $this->set(compact('posts'));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-13 03:35:14

@Ross建议你使用Portfolio.slug进行搜索,所以你可以这样做:

  1. 将一个名为slug的字段添加到数据库表中。当您创建或更新"Portfolio“记录时,使用Inflector::slug方法来生成一个

并将其保存到数据库中。在保存数据之前,您始终可以在模型的beforeSave事件中执行此操作,或者在控制器中执行此操作。

  1. 更新find调用以查找Portfolio.slug而不是find

不幸的是,没有办法反转Inflector::Slug函数,因为它删除了某些字符,如撇号、引号、圆括号等,这就是为什么如果您想要搜索它,需要将slug保存到数据库中。

下面是如何在模型中使用beforeSave事件:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6323930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档