Symfony2实体中的全局函数

时间:2015-06-09 12:02:08

标签: entity-framework symfony service

我有一个全局函数sanitizeName:

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

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

如果我将其写为服务或添加为Twig功能/过滤器,我将无法在实体中访问它,因为它将是错误的。显然我可以将它复制到实体,但它也是令人讨厌的解决方案。我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

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

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

然后,如果您愿意,可以添加一个Twig过滤器/函数来调用此static方法。这样,您就可以访问它:

  • 来自Twig模板,通过过滤器/功能
  • 通过调用`StringUtils :: sanitizeName($ someFoo)
  • 实体类

希望这会有所帮助......

答案 1 :(得分:0)

将服务注入实体是不好的做法。所以静态方法可以。但是,如果您有将在多个实体中使用的代码,则可以使用具有多个有用功能的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
{
    ...
}

此处,sanitize函数可用于具有name属性的所有实体。