如何使用 Yii2 Sluggable Behavior?

2023-10-16php开发问题
11

本文介绍了如何使用 Yii2 Sluggable Behavior?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我已按照文档说明定义了此行为.

I have defined this behavior as per documentation instructions.

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

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

In my config url manager I have defined custom rule like this: example.com/article/1

'urlManager' => [
    'class' => 'yiiwebUrlManager',
    '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' => $model->id, 'slug' => $model->slug])

In my index view file I am generating URL to view action like this : Url::to(['article/view', 'id' => $model->id, 'slug' => $model->slug])

我想像这样在 url 中输出我的文章标题:example.com/article/1/My-first-post

I would like to output my article title in url like this: example.com/article/1/My-first-post

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

But I am not getting title in URL.

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

Soju said that slug is a database attribute. I have created new column in my article table called slug and it is varchar 1024. But I am still not getting slug generated in URL. My URL is: example.com/article/1

怎么了?谢谢

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

EDIT: I have updated my code to insert title value into slug column in my article table. Now I get slug working but I do not get SEO URL-s. I get this: article/1/First+Article, and I would like article/1/First-Article.

我尝试过:

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

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

推荐答案

您可以添加以下 urlManager 规则:

You could add the following urlManager rule :

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

并在您的视图中构建 url,如下所示:

And build url in your views like this :

yiihelpersUrl::to(['article/view', 'id'=>$model->id, 'slug'=>$model->slug])

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

You could also add helpers in your model :

public function getRoute()
{
    return ['article/view', 'id'=>$this->id, 'slug'=>$this->slug];
}

public function getUrl()
{
    return yiihelpersUrl::to($this->getRoute());
}

然后在您的视图中简单地使用 $model->url.

And then simply use $model->url in your views.

这篇关于如何使用 Yii2 Sluggable Behavior?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17