【问题标题】:How to use Yii2 Sluggable Behavior?如何使用 Yii2 Sluggable Behavior?
【发布时间】:2015-05-04 13:18:16
【问题描述】:

我已根据文档说明定义了此行为。

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

在我的配置 url 管理器中,我定义了这样的自定义规则:example.com/article/1

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        'article/<id:\d+>/<slug>' => 'article/view',
    ],
],

我的视图操作是:

public function actionView($id, $slug = null)
{
    return $this->render('view', [
        'model' => $this->findModel($id),
    ]);
}

在我的索引视图文件中,我正在生成 URL 以查看如下操作:Url::to(['article/view', 'id' =&gt; $model-&gt;id, 'slug' =&gt; $model-&gt;slug])

我想在 url 中输出我的文章标题,如下所示:example.com/article/1/My-first-post

但我没有在 URL 中获得标题。

Soju 说 slug 是一个数据库属性。我在我的文章表中创建了名为 slug 的新列,它是 varchar 1024。但我仍然没有在 URL 中生成 slug。我的网址是:example.com/article/1

怎么了?谢谢

编辑:我更新了代码,将标题值插入到文章表的 slug 列中。现在我得到了 slug 的工作,但我没有得到 SEO URL-s。我知道了:article/1/First+Article,我想要article/1/First-Article

我试过了:

return [
    TimestampBehavior::className(),
    [
        'class' => SluggableBehavior::className(),
        'attribute' => 'title',
        'value' => function ($event) {
            return str_replace(' ', '-', $this->slug);
        }
    ],
];

这也不起作用:return str_replace(' ', '-', $this-&gt;slug);

【问题讨论】:

    标签: php url routing yii2 slug


    【解决方案1】:

    您可以添加以下urlManager 规则:

    'article/<id:\d+>/<slug>' => 'article/view',
    

    并像这样在您的视图中构建 url:

    \yii\helpers\Url::to(['article/view', 'id'=>$model->id, 'slug'=>$model->slug])
    

    您还可以在模型中添加助手:

    public function getRoute()
    {
        return ['article/view', 'id'=>$this->id, 'slug'=>$this->slug];
    }
    
    public function getUrl()
    {
        return \yii\helpers\Url::to($this->getRoute());
    }
    

    然后只需在您的视图中使用$model-&gt;url

    【讨论】:

    • 如果我这样做,我会得到这个 url:article/view?id=1,slug 没有被使用。
    • 我当然做到了,但它不起作用。你有没有像我在帖子中那样配置 sluggable 行为?
    • “它不工作”还不够,请添加详细信息:错误消息,否则
    • 我已经告诉过你 url 是 article/view?id=1,它里面没有 slug。没有错误消息。 URL 不输出 slug
    • Url::to(['article/view', 'id' =&gt; $model-&gt;id, 'slug' =&gt; $model-&gt;slug])
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多