我需要在Yii2的网址上使用文章名称,就像http://example.com/article?id=1一样,只需将id = 1替换为article_name,就像http://example.com/article/article_name一样,或者是它。
这是我的控制器代码 -
$model = Articles::find()->orderBy(['id' => SORT_DESC])->one();
查看 -
<?= Html::a('<b>Read more ...</b>', ['article-details','id' => $model->id], ['target'=>'_blank']) ?>
感谢提前
答案 0 :(得分:0)
你有两种方式
更改控制器中的相关操作,在相关函数声明中使用name更改id
或声明一个名为参数
的新动作public function findModelName($article_name)
{
$model = Article::findOne(['name'=> $article_name]);
........ your related code
}
您可以通过这种方式找到模型
Article::findOne(['name'=> $article_name]);
答案 1 :(得分:0)
您可以使用yii2可缓慢行为Refer this。 步骤很少。 您必须添加以下urlManager规则:
'article/<slug>' => 'article/view',
您应该在视图文件中构建网址,如下所示:
\yii\helpers\Url::to(['article/view', 'slug'=>$model->title])
或
\yii\helpers\Url::to(['article/'.$model->title]);
在你的行动中
public function actionArticle($slug){
$model = Articles::find()->where(["title"=>$slug])->orderBy(['id' => SORT_DESC])->one();
//and other code
}
此外,你的文章标题必须对url有效。你可以通过修剪空格等方便地做到这一点但是你也可以添加url一些标识属性。或为每篇文章添加列存储的唯一slugs