php - CakePHP 在 URL 中同时使用 ID 和标题

标签 php cakephp

我想使用 ID 和喜好标题创建一个类似以下的链接:/favours/20201/This_is_a_favour

我已经设置了如下链接:

<h3><?php echo $this->Html->link($favour['Favour']['title'], array('controller'=>'favours','action'=>'view',$favour['Favour']['id'], Inflector::slug($favour['Favour']['title']))); ?></h3>

到目前为止 Controller 的操作是:

function view ( $id, $title )
{
    $favour = $this->Favour->find('first', array(
        'conditions' => array('Favour.title' => $title)
    ));

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

Router::connect('/favours/:id/:favourName',array('controller'=>'favours','action'=>'view'),
        array(
            'favourName'=>'[A-Za-z0-9\._-]+',
            'pass'=>array('favourName')
        ),
        array('id' => '[0-9]+')
    );

但是我现在得到了 404?

注意:我不想使用 sluggable 插件或在数据库中存储 slugs!

最佳答案

首先您需要在routes.php中设置您的路线:

Router::connect('/favours/:id',
                array('controller' => 'favors', 'action' => 'view'),
                array('id' => '[0-9]+', 'pass' => array('id')));

Router::connect('/favours/:id/:slug',
                array('controller' => 'favors', 'action' => 'view'),
                array(
                    'id'   => '[0-9]+',
                    'slug' => '[A-Za-z0-9\._-]+',
                    'pass' => array('id', 'slug')
                ));

然后我建议向您的 Favor 模型添加一个方法来处理 :slug 参数的创建,因为您必须从不同的地方使用它,并且您可能想要更改稍后它到底是如何工作的:

public static function slug(array $favour) {
    // good enough for now, might want to change this later
    return Inflector::slug($favour['title']);
}

然后,每当您创建链接时,请像这样操作:

array('controller' => 'favours', 'action' => 'view',
      'id' => $favour['Favour']['id'], 'slug' => Favour::slug($favour['Favour']))

您的 Controller 操作如下所示:

public function view($id, $slug) {
    $favour = $this->Favour->find('first', array('conditions' => array('Favour.id' => $id)));
    if (!$favour) {
        $this->cakeError('error404');
    }
    if (Favour::slug($favour['Favour']) != $slug) {
        $this->redirect(array('id' => $id, 'slug' => Favour::slug($favour['Favour'])));
    }

    $this->set(compact('favour'));
}

关于php - CakePHP 在 URL 中同时使用 ID 和标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718606/

相关文章:

php - MySQL PHP 'Filter' 用于服务

php - Mysql查询在Phpmyadmin中有效,但在PHP中无效

php - 从 ssl 移动到非 ssl 时 session 不保存

php - 使用 cakephp 从数据库中推荐单词

php - 由于缓存,CakePHP Flash 消息未显示

php - 使用 HABTM 在空数据库 CakePHP 中使用事务

mysql - 在 CakePHP 3 中编辑主键

php - 如何在 PHP 中输​​出 Excel 可以正确读取的 UTF-8 CSV?

php - 在每三个图像 PHP 之后添加一个新行

php - Yii 不验证 2 列的唯一索引