用于slug的CakePHP Routes.php

用于slug的CakePHP Routes.php,cakephp,routes,cakephp-2.0,Cakephp,Routes,Cakephp 2.0,我试图让我的CakePHP应用程序使用slug而不是id。我已经阅读了一些教程和CakePHP书籍,但我肯定错过了一些简单的东西 我的表有一个“slug”字段,我想用它作为URL,而不是默认id 我将ItemsController视图更改为: public function view($slug = null) { if (!$this->Item->exists($slug)) { throw new NotFoundException(__('Invali

我试图让我的CakePHP应用程序使用slug而不是id。我已经阅读了一些教程和CakePHP书籍,但我肯定错过了一些简单的东西

我的表有一个“slug”字段,我想用它作为URL,而不是默认id

我将ItemsController视图更改为:

public function view($slug = null) {
    if (!$this->Item->exists($slug)) {
        throw new NotFoundException(__('Invalid item'));
    }

    $this->set('item', $this->Item->findBySlug($slug));
}
并将其添加到my routes.php

Router::connect(
'/items/:slug', 
array('controller' => 'items', 'action'=>'view'),
array('pass'=>array('slug'))
);
但是,当我转到以下位置时,仍然会收到“无效项目,未找到请求的地址…”

mycakeapp/items/slug-value
但是,如果我将所有内容从“slug”更改为“id”,则URL:

mycakeapp/items/id-value
很好用


有人能帮我吗?提前感谢。

好吧,请阅读文档以了解更多信息

如果存在具有特定ID的记录,则返回true

如果未传递$id,它将调用Model::getID()以获取当前 记录ID,然后对当前 已配置数据源以确定中是否存在记录 持久存储

它需要一个id而不是slug

下面是一个显示艺术家的模型方法的适当示例:

public function view($id = null, $options = array()) {
    $defaults = array(
        'contain' => array(
            /* ... */
        ),
        'conditions' => array(
            'OR' => array(
                $this->alias . '.' . $this->primaryKey => $id,
                $this->alias . '.slug' => $id
            )
        )
    );

    $artist = $this->find('first', Hash::merge($defaults, $options));

    if (empty($artist)) {
        throw new NotFoundException(__('Invalid Artist'));
    }

    return $artist;
}

控制器尝试/捕获异常,并通过调用session->setFlasH()将异常消息设置为会话。简单。:)

好吧,请阅读文档以了解更多信息

如果存在具有特定ID的记录,则返回true

如果未传递$id,它将调用Model::getID()以获取当前 记录ID,然后对当前 已配置数据源以确定中是否存在记录 持久存储

它需要一个id而不是slug

下面是一个显示艺术家的模型方法的适当示例:

public function view($id = null, $options = array()) {
    $defaults = array(
        'contain' => array(
            /* ... */
        ),
        'conditions' => array(
            'OR' => array(
                $this->alias . '.' . $this->primaryKey => $id,
                $this->alias . '.slug' => $id
            )
        )
    );

    $artist = $this->find('first', Hash::merge($defaults, $options));

    if (empty($artist)) {
        throw new NotFoundException(__('Invalid Artist'));
    }

    return $artist;
}

控制器尝试/捕获异常,并通过调用session->setFlasH()将异常消息设置为会话。简单。:)

好吧,请阅读文档以了解更多信息

如果存在具有特定ID的记录,则返回true

如果未传递$id,它将调用Model::getID()以获取当前 记录ID,然后对当前 已配置数据源以确定中是否存在记录 持久存储

它需要一个id而不是slug

下面是一个显示艺术家的模型方法的适当示例:

public function view($id = null, $options = array()) {
    $defaults = array(
        'contain' => array(
            /* ... */
        ),
        'conditions' => array(
            'OR' => array(
                $this->alias . '.' . $this->primaryKey => $id,
                $this->alias . '.slug' => $id
            )
        )
    );

    $artist = $this->find('first', Hash::merge($defaults, $options));

    if (empty($artist)) {
        throw new NotFoundException(__('Invalid Artist'));
    }

    return $artist;
}

控制器尝试/捕获异常,并通过调用session->setFlasH()将异常消息设置为会话。简单。:)

好吧,请阅读文档以了解更多信息

如果存在具有特定ID的记录,则返回true

如果未传递$id,它将调用Model::getID()以获取当前 记录ID,然后对当前 已配置数据源以确定中是否存在记录 持久存储

它需要一个id而不是slug

下面是一个显示艺术家的模型方法的适当示例:

public function view($id = null, $options = array()) {
    $defaults = array(
        'contain' => array(
            /* ... */
        ),
        'conditions' => array(
            'OR' => array(
                $this->alias . '.' . $this->primaryKey => $id,
                $this->alias . '.slug' => $id
            )
        )
    );

    $artist = $this->find('first', Hash::merge($defaults, $options));

    if (empty($artist)) {
        throw new NotFoundException(__('Invalid Artist'));
    }

    return $artist;
}

控制器尝试/捕获异常,并通过调用session->setFlasH()将异常消息设置为会话。简单。:)

事实上是这样的,我早该抓到的。谢谢事实上是这样的,我早该抓到的。谢谢事实上是这样的,我早该抓到的。谢谢事实上是这样的,我早该抓到的。谢谢