实体中的 Symfony2 全局函数

Symfony2 global function in entity

我有一个全局函数 sanitizeName:

function sanitizeName($s) {
    return preg_replace('/somethingCrazy/', 'notSoCrazy', $s);
}

我需要在实体(例如 RSS 生成)、Twig 模板和控制器中使用它。

如果我将它写为服务或添加为 Twig function/filter 我将无法在实体中访问它,因为它是错误的。显然我可以将它复制到实体,但这也是一个令人讨厌的解决方案。我该如何正确执行此操作?

您可以使用 static 方法编写自己的 class:

class StringUtils{
    public static function sanitizeName($s) {
        return preg_replace('/somethingCrazy/', 'notSoCrazy', $s);
    }
}

然后,如果您愿意,可以添加一个 Twig filter/function 来调用此 static 方法。这样,您就可以访问它了:

  • Twig 模板中,通过 filter/function
  • entity classes 通过调用`StringUtils::sanitizeName($someFoo)

希望这对您有所帮助...

将服务注入实体是不好的做法。所以静态方法就可以了。但是,如果您有将在多个实体中使用的代码,您可以拥有一个具有多个有用功能的 BaseEntity。例如:

/**
 * Base class for all project entities.
 */
class BaseEntity
{
        public function sanitizeName()
        {
            return preg_replace('/somethingCrazy/', 'notSoCrazy', $this->getName());
        }       
}

/**
 * My product entity.
 */        
class Product extends BaseEntity
{
    ...
}

这里可以在所有具有 name 属性.

的实体中使用 sanitize 函数