У меня есть слушатель для шифрования и дешифрования. Зашифровать:
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;
}
Проблема связана с расшифровкой. Как изменить данные при загрузке, не сохраняя их в базе данных? Прямо сейчас он обновляет зашифрованные данные с помощью дешифрованной загрузки.
Спасибо
@LioraHaydont Мне сказали, что Listener - лучшее решение ... Мб. Я могу делать расшифровку в геттерах.
Что не работает в вашем текущем коде?
Как это должно работать: prePersist: зашифровать данные и сохранить в db. postLoad: временно (без сохранения / сохранения в БД) дешифровать данные из БД, когда я обращаюсь к ним в ветке или контроллере. ------ Как это работает: prePersist: Как и ожидалось. postLoad: обновляет существующие (зашифрованные) данные в БД до расшифрованных.
какую библиотеку вы используете для шифрования / дешифрования значений?




Ваша проблема в том, что вам не следует использовать событие prePersist, поскольку это событие вызывается только при добавлении объекта в эту базу данных, но не при его обновлении.
В списке событий жизненного цикла Doctrine здесь вы можете увидеть, что событие, которое вы хотите использовать, - это preUpdate, чтобы при каждом изменении оно снова зашифровывалось перед сохранением.
Спасибо за помощь. Я очень ценю это .
Почему вы не шифруете / не дешифруете свои геттеры / сеттеры?