Symfony / Doctrine - 实体内的访问服务

时间:2018-01-25 09:02:47

标签: symfony doctrine

我创建了一个加密服务,并希望在实体内部访问它。 就像这样:

public function setCompanyName(string $companyName, Encryption $encryption)
{
    $this->companyName = $encryption->encrypt($companyName);
}

但是,如果不使用两个参数调用此函数 setCompanyName ,是否可以这样做?我是否必须在函数内注入容器和调用服务?

3 个答案:

答案 0 :(得分:1)

无法在实体内部注入服务。 但您可以使用实体侦听器来使用您的服务并在持久化之前加密公司名称juste。 看看https://symfony.com/doc/current/bundles/DoctrineBundle/entity-listeners.html

答案 1 :(得分:1)

您想在db中存储加密数据吗?

执行此操作的最佳方法是创建事件侦听器,以便在每个实体保存时启动,并在那里进行加密(您可以注入任何想要侦听的内容) 和从db加载数据以启动解密时启动的第二个事件监听器

如果你这样做,所有加密/解密事物在代码中都是透明的(它只存在于那些监听器中)

看看这个 https://symfony.com/doc/3.4/doctrine/event_listeners_subscribers.html http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html

答案 2 :(得分:-1)

也许在Encrypt类中创建一个静态方法,并直接在实体中调用它?

class Encryption {
    public static function encrypt(string $string) {
        // your code
    }
}

public function setCompanyName(string $companyName) {
    $this->companyName = Encryption::encrypt($companyName);
}