如何在yii2中为动态标题制作seo友好的URL

时间:2016-02-04 14:16:19

标签: yii2 yii2-advanced-app yii2-basic-app

我在多个帖子网站上工作,会有多个帖子,我需要做什么,我需要动态seo友好网址和帖子标题,
假设我创建了一个帖子,如"sachin tendulkar",然后在yii2中,其网址应该像http://domain.com/sachin-tendulkar我怎样才能在网址中执行此操作?有谁有更好的解决方案吗?
如何在yii2中管理这个问题,如果有任何例子那么真的很感激。我试过谷歌搜索但没有得到任何适当的解决方案

1 个答案:

答案 0 :(得分:2)

使用SluggableBehavior http://www.yiiframework.com/doc-2.0/yii-behaviors-sluggablebehavior.html

在包含帖子的表格中创建新列,并在ActiveRecord中添加此代码:

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

帖子的标题会自动创建。

之后在Controller中的动作方法中使用此slug来获得正确的帖子。例如:

class PostController extends Controller
{
    public function actionView($slug)
    {
        $post = Post::findOne(['slug'=>$slug]);
        .....
    }
}

另外,对于漂亮的网址,您应该在配置文件(http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#using-pretty-urls)的urlManager部分设置enablePrettyUrl属性并设置如下规则:

'urlManager' => [
    'enablePrettyUrl'=>true,
    'showScriptName'=>false,
    ....
    'rules' => [
         'post/<slug:[a-zA-Z0-9_ -]+>' => 'post/view',
          ....
    ],
]