使用slug(Using slugs)

即使使用了 pretty URLs套件,下面這種網址

http://example.com/post/42

看起來依舊不是很友善。

使用 Yii,不需要很多功夫就可以把網址改成像是:

http://example.com/post/hello-world

1. 準備

設置好資料庫,並建立以下表格:

post
====
id
title
content

使用 Gii 生成 Post模型,與對應的 CRUD 操作。

2. 作法

post表格裡面加入slug欄位。 然後在模型裡面加入 sluggable behavior:

<?php
use yii\behaviors\SluggableBehavior;

// ...

class Post extends ActiveRecord
{
    // ...

    public function behaviors()
    {
        return [
            [
                'class' => SluggableBehavior::className(),
                'attribute' => 'title',
            ],
        ];
    }

    // ...
}

現在,每當我們建立文章時,資料庫的slug欄位也會自動更新。

修改控制器(controller)的部份,加入以下函式:

protected function findModelBySlug($slug)
{
    if (($model = Post::findOne(['slug' => $slug])) !== null) {
        return $model;
    } else {
        throw new NotFoundHttpException();
    }
}

改變actionview()函式:

public function actionView($slug)
{
    return $this->render('view', [
        'model' => $this->findModelBySlug($slug),
    ]);
}

如果要產生連接文章的網址,需要傳遞對應的 slug :

echo Url::to(['post/view', 'slug' => $post->slug]);

3. 標題改變處理

有很多方式可以處理標題改變的狀況。其中一種方式是在網址裡面加入文章 ID,並利用 ID 來找文章內容

http://example.com/post/42/hello-world

results matching ""

    No results matching ""