2015-05-08 3 views
9

Ich bin innerhalb "PostsTable.php" Ich versuche, Formulardaten zu erhalten, um Bilddateien zu behandeln.

In CakePHP 2, habe ich zu tun:

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

Jemand könnte dies in 3 Kuchen erklären:

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

?

ADDED

Ich versuche, diese Code-Snippet zu sehen, ob ich in der Lage bin auf Datenbank um dieses Feld zu speichern nur als Test, aber es scheint before ignoriert wird:

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

Dank

Antwort

-5

Lassen Sie mich read the manual für Sie:

Das Model.beforeSave-Ereignis wird ausgelöst, bevor die Entität gespeichert wird. Durch das Beenden dieses Ereignisses wird die Sicherungsoperation abgebrochen. Wenn das Ereignis beendet wird, wird das Ergebnis des Ereignisses zurückgegeben.

auch:

Model.beforeSave: Wird kurz vor der Liste der Felder ausgelöst werden, werden beibehalten berechnet. Er empfängt sowohl die Entität als auch die Optionen als Argumente. Das Optionsarray wird als ArrayObject übergeben, daher werden alle Änderungen in jedem Listener reflektiert und am Ende des Ereignisses gespeichert, damit es für den Rest der Sicherungsoperation verwendet werden kann. Wird in einem der Listener false zurückgegeben, wird der Speichervorgang abgebrochen. Wenn das Ereignis mithilfe der Ereignis-API gestoppt wird, wird die Ergebniseigenschaft des Ereignisobjekts zurückgegeben. Dies kann nützlich sein, wenn Sie Ihre eigene Sicherungsstrategie in einem Listener implementiert haben.

zu tun, was Sie in Cake2 vorher Sie einfach $entity ändern können, weil Unternehmen, die die Model::$data Eigenschaft ersetzt haben.

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

Wenn Sie nicht wissen, wie Ereignisse funktionieren read about them. Auch the migration guide ist ein Muss. Es listet alles auf, was sich geändert hat.

+0

Ich habe es geändert, aber die beforeSave scheint ignoriert zu werden. Ich habe das versucht, ich habe die Frage nur als Test hinzugefügt, aber der Name ist nicht festgelegt. –

+0

@burzump ist gerade hier passiert ist: Ich habe, was ich versuchte zu tun, aber ich habe vor Marschall statt vorherSave. Gibt es ein Problem? Ich möchte nur den Pfad in der Datenbank und die Datei in einem Ordner speichern. Aber beforeSave scheint ignoriert zu werden ... –

+0

Lesen Sie das Handbuch;) 'Sie können das Model.beforeMarshal-Ereignis verwenden, um Anforderungsdaten zu ändern, bevor es in Entitäten konvertiert wird. Ich habe keine Ahnung, warum es nicht für Sie funktioniert. – burzum

7

Beginnen Sie mit der Funktionsdefinition.

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

Da CakePHP die Funktion automatisch anruft, ist dies, wie es genannt wird, so bauen Sie Ihre Funktion identisch mit der Funktionsdefinition:

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

} 

Wenn Sie nicht sicher sind, welche Daten sein wird gesendet wird, verwenden debug() Funktion des CakePHP:

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

Sobald Sie Ihre Daten in $entity verwenden Sie es finden, zu tun, was Sie auf Ihre Daten zu tun:

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