2015-05-08 8 views
9

Sono all'interno di "PostsTable.php" Sto cercando di ottenere i dati del modulo per trattare i file di immagine.

In CakePHP 2, ho usato per fare:

public function beforeSave($options = array()) 
{ 
if(!empty($this->data['Post']['picture']['name'])... 

Qualcuno potrebbe spiegare questo in Cake 3:

beforeSave 
Cake\ORM\Table::beforeSave(Event $event, Entity $entity, ArrayObject $options) 

?

AGGIUNTO

provo questo frammento di codice per vedere se sono in grado di salvare questo campo sulla base di dati proprio come un test ma sembra BeforeSave viene ignorato:

public function beforeSave($options) 
{ 
if(!empty($entity->pic1['name'])) 
{ 
$entity->pic1 = 'jus a test'; 
} 

Grazie

risposta

-5

Lasciatemi read the manual per voi:

L'evento Model.beforeSave viene generato prima che ciascuna entità venga salvata. L'interruzione di questo evento interromperà l'operazione di salvataggio. Quando l'evento viene interrotto, verrà restituito il risultato dell'evento.

anche:

Model.beforeSave: verrà attivato appena prima l'elenco dei campi da persistito viene calcolato. Riceve sia l'entità che le opzioni come argomenti. L'array di opzioni viene passato come ArrayObject, quindi qualsiasi modifica in esso verrà riflessa in ogni listener e memorizzata alla fine dell'evento in modo che possa essere utilizzata per il resto dell'operazione di salvataggio. Restituire false in qualsiasi degli ascoltatori interromperà il processo di salvataggio. Se l'evento viene arrestato utilizzando l'API dell'evento, la proprietà del risultato dell'oggetto evento verrà restituita. Questo può essere utile quando hai implementato la tua strategia di salvataggio all'interno di un listener.

di fare tutto ciò che hai fatto prima in cake2 si può semplicemente modificare $entity perché le entità hanno sostituito la proprietà Model::$data.

if(!empty($entity->picture['name']) 

Se non sai come funzionano gli eventi read about them. Anche the migration guide è una lettura obbligata. Elenca tutto ciò che è cambiato.

+0

L'ho modificato ma il beforeSave sembra essere ignorato. Ho provato questo ho aggiunto alla domanda solo come un test ma il nome non è impostato. –

+0

@burzump è appena successo qui: ho ottenuto quello che stavo cercando di fare ma prima usavo Marshal invece di Save. C'è qualche problema? Voglio solo salvare il percorso nel database e il file in una cartella. Ma primaSave sembra essere ignorato ... –

+0

Leggi il manuale;) 'Puoi utilizzare l'evento Model.beforeMarshal per modificare i dati della richiesta prima che venga convertito in entità. Non ho idea del perché non funzioni per te. – burzum

7

Inizia con la definizione della funzione.

Cake\ORM\Table::beforeSave(Event $event, EntityInterface $entity, ArrayObject $options) 

Dal CakePHP chiama automaticamente la funzione, questo è come viene chiamato, in modo da costruire la vostra funzione in modo identico alla definizione di funzione:

// In PostsTable.php 
public function beforeSave($event, $entity, $options) { 

} 

Se non sei sicuro di quello che i dati vengono inviato, utilizzare la funzione di CakePHP debug():

debug($event); debug($entity); debug($options); 

Una volta trovato i dati in $entity usarlo per fare ciò che si vuole fare per i vostri dati:

if(!empty($entity->picture['name'])... 
Problemi correlati