2013-04-19 21 views
7

Mam podmiot product i ma images pole, które ich zapisywania nazwy od produktu, ale nazwy obrazów zależy z part_number dziedzinie, która jest wyjątkowa, więc jeśli użytkownik popełni błąd w numerze katalogowym i chce go edytować to muszę też zmienić obrazy nazwyzestarzeć dane preUpdate Sonata Admin Bundle

to próbowałem, ale to nie działa:

// class ProductsAdmin extends Admin 

public function preUpdate($product) { 

    $old_product = $this->getSubject(); 

    if ($old_product->getPartNumber() != $product->getPartNumber) 
    { 
     // change file names 
    } 

    $this->saveFile($product); 
} 

Jak uzyskać oryginalny wiersz w preUpdate() funkcji ?

Odpowiedz

13

Według tematu zaczerpnięte z oficjalnego forum SonataAdmin Google: https://groups.google.com/forum/#!topic/sonata-devs/0zML6N13i3U trzeba skorzystać z klasy UnitOfWork: http://www.doctrine-project.org/api/orm/2.3/class-Doctrine.ORM.UnitOfWork.html

Czy w ten sposób:

public function preUpdate($object) 
{ 
    $em = $this->getModelManager()->getEntityManager($this->getClass()); 
    $original = $em->getUnitOfWork()->getOriginalDocumentData($object); 
} 

W ten sposób uzyskać tablicę wartości encji bazy danych. Np: aby uzyskać dostęp do hasła wartość swojego podmiotu zrobić:

$password = $original['password']; 

to wszystko. Enjoy :)

+11

Pamiętaj, że dla MongoDB użyjesz „getOriginalDocumentData” jako sposobu na unitOfWork ale dla MySQL ty będzie musiał użyć "getOriginalEntityData". –

0

Jeśli po prostu wykonujesz zapytanie dotyczące doktryny w funkcji preUpdate, aby pobrać produkt z bazy danych, będziesz miał stary obiekt. Potem zrób porównanie i jesteś gotowy.

+0

Geert Wille, rozwiązanie nie będzie działać –

+0

będzie to jednak rozwiązanie jest lepszy ... –