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