如何在不显示 ID 号的情况下使用 Yii2 Sluggable Behavior?
Posted
技术标签:
【中文标题】如何在不显示 ID 号的情况下使用 Yii2 Sluggable Behavior?【英文标题】:How to use Yii2 Sluggable Behavior without showing id number? 【发布时间】:2020-08-09 02:04:36 【问题描述】:我已经阅读了using SluggableBehavior in Yii2 上的问题
在我的试用案例中,我可以使用 urlManager 中的规则生成类似 article/1/First-Article 的 url
'article/<id:\d+>/<slug>' => 'article/view',
并使用
\yii\helpers\Url::to(['article/view', 'id'=>$model->id, 'slug'=>$model->slug])
创建网址。
在我的真实案例中,我使用 ['article/view', 'hash'=> $model->hash, 'slug'=>$model->slug] 来生成 url。我的规则是
'article/<hash:[\d-\w]+>/<slug>'=>'article/view'
我的网址类似于 article/1e482d69129d760e9494b2c6e86eba2b/First-Article。
我只想显示文章/First-Article 之类的 url,即不显示 url 中的哈希码。有没有办法做到这一点?非常感谢!
【问题讨论】:
【参考方案1】:根据Yii docs,如果您指定SluggableBehavior
的attribute
属性与模型属性的数组,它将内爆(连接)它们以便为slug 生成唯一性.在您的情况下,此实现完全满足您所需的 slug 连接组合(例如First-Article-1
);
在内部SluggableBehavior
将执行它的generateSlug
方法,从attribute
属性中定义的属性组合生成唯一的slug。 由于generateSlug
默认使用-
分隔符,它完全符合您的要求,以便生成所需的url slug。
看看这个:
public function behaviors()
return [
[
'class' => SluggableBehavior::className(),
'attribute' => ['slug', 'id'],
...
]
];
编辑:
这是您的网址规则:'article/<slug>' => 'article/view'
和
生成适当的链接:Url::to(['article', 'slug' => $model->slug . '-' . $model->id])
【讨论】:
谢谢 G.Spirov。但是我遇到的问题是我无法生成没有 id 的 url。我只能生成article/1/First-Article,但不能生成article/First-Article。你知道如何实现这一点吗? 谢谢。但我很难尝试你的代码。我将重写我的问题以使其更清楚。 是什么让它变得困难?我可以帮你吗? 是的。你能阅读修改后的问题吗?非常感谢:) 恐怕您无法做到这一点,因为正如您之前指出的那样,您可能有 1 个或多个具有相同标题的模型,基本上您应该保证不同文章之间的唯一性。这就是为什么SlugableBehavior
的attribute
属性可以定义为字符串或数组,以便在多个 模型属性之间应用组合的唯一性。以上是关于如何在不显示 ID 号的情况下使用 Yii2 Sluggable Behavior?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?
如何在不使用相同音频 ID 的情况下播放从数据库中获取的多个音频文件