php - symfony2实体的slugify方法在哪里

标签 php oop symfony design-patterns doctrine-orm

我有 slugify 方法,每次更改实体类的标题属性时都会对其进行 slugify 处理。 所以我把这个方法放在实体类中并这样调用:

public function setTitle($t){
  $this->title = $t;
  $this->slugTitle = $this->slugify($t);
}

它对我来说工作得很好,但是如果我有多个类使用 slugify 方法,我应该把这个方法放在所有的类中,这就是代码重复。

那我该怎么办呢?如果使用辅助类,我不能像上面的方法一样使用 slugify() :-(。

最佳答案

您可以使用 Doctrine event listener/subscriber监听实体的变化并采取行动。

namespace Acme\DemoBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;

class SlugifyListener
{
    public function preUpdate(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        $entityManager = $args->getEntityManager();

        // do something with $entity...
    }
}

services.xml:

<service id="my.listener" class="Acme\DemoBundle\EventListener\SlugifyListener">
    <tag name="doctrine.event_listener" event="preUpdate" />
</service>

但是在这种情况下,您最好查看 Doctrine Extensions bundle 。它提供了一个 Sluggable 扩展,可以为您完成此操作,而不是重新发明轮子。

关于php - symfony2实体的slugify方法在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442048/

相关文章:

php - (PHP) 当脚本作为 cron 作业执行时如何获取文件名(或文件路径)?

php - 从Symfony2捕获ContextErrorException

Symfony 4 - 从项目目录下载文件

PHP:OOP 中的变量作用域?

class - ":"在 dart 的类构造函数中意味着什么?

php - 如何在 symfony2 的一个 Controller 和存储库上对搜索结果和显示进行分页?

php - 是否有简单、开源的学习友好型 Web 应用程序?

php - 我如何使用 mysql join 来安排具有最新回复的对话

php - 非 SSL 和 SSL 之间的 session 丢失

java - 为什么我无法在 Java 中访问这个创建的对象?