Symfony/Doctrine-侦听器-加密/解密

Symfony/Doctrine-侦听器-加密/解密,symfony,Symfony,我有用于加密和解密的侦听器。 加密: 问题在于解密部分。 如何在加载时修改数据而不将其保存在数据库中?现在它正在用解密的onload更新加密数据 谢谢您的问题是不应该使用prePersist事件,因为此事件仅在向该数据库添加实体时调用,而在更新实体时不会调用 在Doctrine lifecycle events(条令生命周期事件)列表中,您可以看到您想要使用的事件是预更新,因此每次更改时,它都会在保存之前再次加密您的问题是,您不应该使用预存事件,因为只有在向该数据库添加实体时才会调用此事件,但当

我有用于加密和解密的侦听器。 加密:

问题在于解密部分。 如何在加载时修改数据而不将其保存在数据库中?现在它正在用解密的onload更新加密数据


谢谢

您的问题是不应该使用
prePersist
事件,因为此事件仅在向该数据库添加实体时调用,而在更新实体时不会调用


在Doctrine lifecycle events(条令生命周期事件)列表中,您可以看到您想要使用的事件是
预更新
,因此每次更改时,它都会在保存之前再次加密

您的问题是,您不应该使用
预存
事件,因为只有在向该数据库添加实体时才会调用此事件,但当你更新一个的时候就不行了


在条令生命周期事件列表中,您可以看到您希望使用的事件是
预更新
,因此每次更改时,它都会在保存之前再次加密

为什么不在getter/setter中加密/解密?@Liorahaydon我被告知侦听器是更好的解决方案。。。Mb我可以在getters中进行解密。在您当前的代码中,什么不起作用?它应该如何工作:prePersist:加密数据并保存到db。postLoad:当我在twig或controller中访问数据库时,临时(不保存/保存到数据库)解密数据库中的数据。------工作原理:预科生:如预期。后加载:它正在将数据库中的现有(加密)数据更新为解密数据。您使用哪个库来加密/解密值?为什么不在getter/setter中加密/解密?@liorahaydon我被告知侦听器是更好的解决方案。。。Mb我可以在getters中进行解密。在您当前的代码中,什么不起作用?它应该如何工作:prePersist:加密数据并保存到db。postLoad:当我在twig或controller中访问数据库时,临时(不保存/保存到数据库)解密数据库中的数据。------工作原理:预科生:如预期。后加载:它正在将数据库中的现有(加密)数据更新为解密数据。您使用哪个库来加密/解密值?谢谢帮助。我真的很感激。谢谢你的帮助。我真的很感激。
public function prePersist(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();


    if ($entity instanceof Customer) {
        $entity->setEmail($this->encryption->encrypt($entity->getEmail()));
        $entity->setPhone($this->encryption->encrypt($entity->getPhone()));
    } elseif ($entity instanceof Address) {
        $entity->setFirstName($this->encryption->encrypt($entity->getFirstName()));
        $entity->setLastName($this->encryption->encrypt($entity->getLastName()));
        $entity->setCompanyName($this->encryption->encrypt($entity->getCompanyName()));
        $entity->setStreet($this->encryption->encrypt($entity->getStreet()));
        $entity->setCity($this->encryption->encrypt($entity->getCity()));
    }

    return;
}

public function postLoad(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();


    if ($entity instanceof Customer) {
        $entity->setEmail($this->encryption->decrypt($entity->getEmail()));
        $entity->setPhone($this->encryption->decrypt($entity->getPhone()));
    } elseif ($entity instanceof Address) {
        $entity->setFirstName($this->encryption->decrypt($entity->getFirstName()));
        $entity->setLastName($this->encryption->decrypt($entity->getLastName()));
        $entity->setCompanyName($this->encryption->decrypt($entity->getCompanyName()));
        $entity->setStreet($this->encryption->decrypt($entity->getStreet()));
        $entity->setCity($this->encryption->decrypt($entity->getCity()));
    }

    return;
}