gpt4 book ai didi

php - Symfony 从实体标题创建 slug

转载 作者:行者123 更新时间:2023-12-05 03:14:04 25 4
gpt4 key购买 nike

我有一个可用的博客,但我对好的 url 的想法有点晚了。

我不想使用 slugable 等 bundle ,因为我没有太多时间阅读文档并实现它们。

是否有可能到达一个实体的字段并在 Doctrine 执行到数据库之前从中生成 slug?

我在实体中想到了一个简单的解决方案,例如:

public function __construct() {
$this->setPostedAt(new \DateTime());
$this->setSlug();
}
public function setSlug(){
$tmpslug = (string)$this->id."-";
$tmpslug .= $this->slugify($this->title);

$this->slug = $tmpslug;
}

然而,这将不起作用,因为调用 construct() 时 id 和 title 字段为空。

是否有不需要实现新扩展的快速解决方案?

谢谢!

最佳答案

我不认为 Sluggable(来自 DoctrineExtensions)会比重新发明现成的轮子花费更多的时间。我会使用它,它需要 10 分钟才能准备好使用。

  1. 添加 "stof/doctrine-extensions-bundle": "~1.1@dev"composer.json
  2. 将配置添加到config.yml:

配置:

stof_doctrine_extensions:
orm:
default:
uploadable: false
sluggable: true
timestampable: false
translatable: false
tree: false
blameable: false
loggable: false
sortable: false
softdeleteable: false
  1. slug 字段和 getter/setter 添加到您的实体

代码:

private $slug;
public function getSlug() {...}
public function setSlug($slug) {...}
  1. xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping" 添加到您实体中的 doctrine-mapping 部分。 orm.xml(如果您使用的是 xml)
  2. 将 slug 字段添加到您的 ENTITY.orm.xml(如果您使用的是 xml);

代码:

<field name="slug" column="slug" type="string">
<gedmo:slug fields="title(OR_YOUR_DESIRED_FIELD)" unique="true" updatable="true" />
</field>

就是这样,你可以忘记它,你不需要设置,事件监听器会处理它..

关于php - Symfony 从实体标题创建 slug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27464155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com