2013-04-19 18 views
7

Ho un'entità product e ha un campo images che memorizza i nomi delle immagini dal prodotto ma i nomi delle immagini dipendono da un campo part_number che è univoco, quindi se l'utente commette un errore nel numero di parte e che vuole di modificarla poi devo anche cambiare i nomi immaginiOttieni dati precedenti in preUpdate Sonata Admin Bundle

ho provato questo ma non funziona:

// class ProductsAdmin extends Admin 

public function preUpdate($product) { 

    $old_product = $this->getSubject(); 

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

    $this->saveFile($product); 
} 

Come ho la riga originale in PreUpdate() funzione ?

risposta

13

Secondo l'argomento tratto dal forum SonataAdmin ufficiale di Google: https://groups.google.com/forum/#!topic/sonata-devs/0zML6N13i3U è necessario fare uso del UnitOfWork classe: http://www.doctrine-project.org/api/orm/2.3/class-Doctrine.ORM.UnitOfWork.html

fare in questo modo:

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

questo modo si ottenere una matrice di valori dell'entità del database. per esempio: per ottenere l'accesso alla password del valore della vostra entità fare:

$password = $original['password']; 

Questo è tutto. Enjoy :)

+11

Ricordate che per MongoDB si utilizzerà 'getOriginalDocumentData' come metodo sul unitOfWork ma per MySQL sarà necessario utilizzare 'getOriginalEntityData'. –

0

Se si esegue una query di dottrina nella funzione preUpdate per ottenere il prodotto dal database, si avrà il vecchio oggetto. Quindi fai il confronto e sei a posto.

+0

Geert Wille, la soluzione non funzionerà –

+0

Sarà, ma la soluzione è uno migliore ... –

Problemi correlati