我有一个全局函数sanitizeName:
function sanitizeName($s) {
return preg_replace('/somethingCrazy/', 'notSoCrazy', $s);
}
我需要在实体中使用它(例如用于RSS生成),在Twig的模板和控制器中使用它。
如果我将其写为服务或添加为Twig功能/过滤器,我将无法在实体中访问它,因为它将是错误的。显然我可以将它复制到实体,但它也是令人讨厌的解决方案。我该怎么做呢?
答案 0 :(得分:2)
您可以使用static
方法编写自己的类:
class StringUtils{
public static function sanitizeName($s) {
return preg_replace('/somethingCrazy/', 'notSoCrazy', $s);
}
}
然后,如果您愿意,可以添加一个Twig
过滤器/函数来调用此static
方法。这样,您就可以访问它:
Twig
模板,通过过滤器/功能希望这会有所帮助......
答案 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
属性的所有实体。