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

How to use article name on the url on Yii2?

我需要在 Yii2 上使用 url 上的文章名称,类似于 http://example.com/article?id=1, just replace id=1 to article_name, like 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']) ?>

提前致谢

你有两种方式

一个更改控制器中的相关操作,在相关函数声明中更改 id 和 name

或者以名称作为参数声明一个新动作

public function findModelName($article_name)
{
    $model = Article::findOne(['name'=> $article_name]);
     ........ your related code 

} 

您可以通过这种方式按名称找到模型

Article::findOne(['name'=> $article_name]);

您可以使用 yii2 的 sluggable 行为 Refer this。 有几个步骤。 您必须添加以下 urlManager 规则:

'article/<slug>' => 'article/view',

您应该像这样在您的视图文件中构建 url :

\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.You 期间有效,可以通过修剪空格等方式轻松实现,但您也可以添加 url 一些标识 属性。或为每篇文章添加列存储的唯一 slugs