2015-05-08 12 views
9

Jestem wewnątrz "PostsTable.php" Próbuję uzyskać dane formularza do traktowania plików graficznych.

W CakePHP 2, kiedyś zrobić:

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

Ktoś mógłby to wyjaśnić w cieście 3:

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

?

DODANO

próbuję ten fragment kodu, aby zobaczyć, czy jestem w stanie uratować tego pola w bazie danych tylko jako test, ale wydaje beforeSave jest ignorowane:

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

Thanks

Odpowiedz

-5

Pozwól mi read the manual dla Ciebie:

Zdarzenie Model.beforeSave jest uruchamiane przed zapisaniem każdej jednostki. Zatrzymanie tego zdarzenia spowoduje przerwanie operacji składowania. Po zatrzymaniu zdarzenia wynik zdarzenia zostanie zwrócony.

również:

Model.beforeSave: zostanie uruchomiony tuż przed listy pól do być utrwalone jest obliczana. Odbiera zarówno encję, jak i opcje jako argumenty. Tablica opcji jest przekazywana jako ArrayObject, więc wszelkie zmiany w niej będą odzwierciedlane w każdym detektorze i zapamiętywane na końcu zdarzenia, aby można było użyć jej do końca operacji składowania. Zwrócenie wartości false w dowolnym z detektorów spowoduje przerwanie procesu zapisywania. Jeśli zdarzenie zostanie zatrzymane przy użyciu interfejsu API zdarzenia, właściwość wyniku obiektu zdarzenia zostanie zwrócona. Może to być przydatne, gdy masz własną strategię oszczędzania zaimplementowaną wewnątrz detektora.

Aby zrobić cokolwiek przedtem w Cake2 można po prostu zmodyfikować $entity ponieważ podmioty zastąpiły właściwość Model::$data.

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

Jeśli nie wiesz, jak działają wydarzenia, read about them. Również the migration guide należy przeczytać. Wymienia wszystko, co się zmieniło.

+0

Zmieniłem to, ale przed zachodem wydaje się być ignorowane. Próbowałem to dodałem do pytania jako test, ale nazwa nie jest ustawiona. –

+0

@burzump po prostu stało się tutaj: Mam to, co próbowałem zrobić, ale wcześniej użyłem Marshal zanim zapisz. Czy jest jakiś problem? Chcę tylko zapisać ścieżkę w bazie danych i plik w folderze. Ale wydaje się, że beforeSave jest ignorowany ... –

+0

Przeczytaj instrukcję;) 'Możesz użyć zdarzenia Model.beforeMarshal, aby zmodyfikować dane żądania, zanim zostaną przekształcone w podmioty." Nie mam pojęcia, dlaczego to nie działa. – burzum

7

Rozpocznij od definicji funkcji.

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

Od CakePHP jest automatycznie wywołanie funkcji, to w jaki sposób jest on nazywany, więc budować swoją funkcję identycznie do definicji funkcji:

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

} 

Jeżeli nie jesteś pewien, co dane są wysłane, użyj CakePHP za debug() funkcję:

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

po znalezieniu danych w $entity używać go do tego, co chcesz zrobić, aby swoje dane:

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