Aktywne Wpisy
klewerewel +4
#rozowepaski #polska #warszawa #zwiazki #pieklokobiet
Nigdy nie widziałam faceta pchającego wózek z dzieckiem. Dlaczego zawsze jest to matka?
Nigdy nie widziałam faceta pchającego wózek z dzieckiem. Dlaczego zawsze jest to matka?
Fin_de_partie +131
Gratka dla wszystkich fanów sypiania w pawlaczu ( ͡° ͜ʖ ͡°)
https://www.otodom.pl/pl/oferta/mieszkanie-2-pokojowe-blisko-centrum-ID4oEMo
#nieruchomosci
https://www.otodom.pl/pl/oferta/mieszkanie-2-pokojowe-blisko-centrum-ID4oEMo
#nieruchomosci
Używam EntityListener, w postLoad robie deszyfrowanie, w prePersist / preUpdate szyfrowanie pola x.
Generalnie działa to dobrze, ale w preUpdate zawartość changeset - x - oldValue jest zaszyfrowana, tak jakby postLoad w ogóle było ominięte, tak ma to działać? Jak robię dump w odpowiednich momentach wszystko jest ok.
Czyli
1) postLoad, x=1
1) dump - pole x jest odszyfrowane - OK
2) zmieniam x=2 - flush i teraz:
- getEntityChangeSet w preUpdate pokazuje oldValue zaszyfrowane (dlaczego nie odszyfrowane po postLoad?), newValue=2
- dump encji pokazuje x=2
3) pole x poprawnie zapisuje się z nową zaszyfrowaną wartością.
Prędzej tu się pewnie sprawdzi customowy typ pola
https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/cookbook/advanced-field-value-conversion-using-custom-mapping-types.html
Trochę #!$%@?. Dla tego lepiej wpiąć się w preFlush i w nim ogarnąć oba przypadki (o ile nie pojdziesz w strone customoweog pola)
customowe pole średnio mi tu pasuje, musiałbym hakować i robić DI (wstrzyknąć serwis szyfrujący) czego nie powinienem najwyraźniej robić http://emanueleminotto.github.io/blog/service-injection-doctrine-dbal-type
Piszą, że zastosowanie do prostych rzeczy.
if ($oldValueDecrypted == $args->getNewValue('data')) {
#czyli wartość się nie zmieniła, próbuję anulować zmianę pola:
subject->setData($args->getOldValue('data));
$uow->recomputeSingleEntityChangeSet($meta, $subject);
}
Ale nic to nie daje, update i tak zachodzi.
setField(string $value) {
$this->field = $value;
$this->setFieldEncrypted(null); // trigger change on mapped field so onFlush can update encrypted value
}
onFlushEvent...
$entity->setFieldEncrypted($this->encryptor->encrypt($entity->getField()));
Na 1 polu chyba się nie da bo recomputeEntityChangesSet() CHYBA (nie sprawdziłem na 100%) tylko merguje nową zmianę i starą (nawet jeżeli ustawisz oryginalną wartośc). zobacz sobie zawartość tej metody:
[...]
if (isset($this->entityChangeSets[$oid])) {
$this->entityChangeSets[$oid] = array_merge($this->entityChangeSets[$oid], $changeSet);
[...]
w ogóle z czego wynika zapotrzebowanie na takie szyfrowanie?