如何在Yii2上的网址上使用文章名称?

时间:2015-11-10 18:07:29

标签: yii2 yii2-advanced-app

我需要在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']) ?>

感谢提前

2 个答案:

答案 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