【问题标题】:How to use Yii2 Sluggable Behavior without showing id number?如何在不显示 ID 号的情况下使用 Yii2 Sluggable Behavior?
【发布时间】: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 中的哈希码。有没有办法做到这一点?非常感谢!

【问题讨论】:

    标签: php yii2 slug


    【解决方案1】:

    根据Yii docs,如果您指定SluggableBehaviorattribute 属性与模型属性的数组,它将内爆(连接)它们以便为slug 生成唯一性.在您的情况下,此实现完全满足您所需的 slug 连接组合(例如First-Article-1);

    在内部SluggableBehavior 将执行它的generateSlug 方法,从attribute 属性中定义的属性组合生成唯一的slug。

    由于generateSlug 默认使用- 分隔符,它完全符合您的要求,以便生成所需的url slug。

    看看这个:

    public function behaviors() 
    {   
         return [
             [
                 'class' => SluggableBehavior::className(),
                 'attribute' => ['slug', 'id'],
                 ...
             ]
         ];
    }
    

    编辑:

    这是您的网址规则:'article/&lt;slug&gt;' =&gt; 'article/view'

    生成适当的链接:Url::to(['article', 'slug' =&gt; $model-&gt;slug . '-' . $model-&gt;id])

    【讨论】:

    • 谢谢 G.Spirov。但是我遇到的问题是我无法生成没有 id 的 url。我只能生成article/1/First-Article,但不能生成article/First-Article。你知道如何实现这一点吗?
    • 谢谢。但我很难尝试你的代码。我将重写我的问题以使其更清楚。
    • 是什么让它变得困难?我可以帮你吗?
    • 是的。你能阅读修改后的问题吗?非常感谢:)
    • 恐怕您无法做到这一点,因为正如您之前指出的那样,您可能有 1 个或多个具有相同标题的模型,基本上您应该保证不同文章之间的唯一性。这就是为什么SlugableBehaviorattribute 属性可以定义为字符串或数组,以便在多个 模型属性之间应用组合的唯一性。
    猜你喜欢
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多