CakePHP 3 beforeMarshal

W niniejszym artykule przyjrzymy się przydatnej metodzie obiektu Table mianowicie beforeMarshal. Jest ona bardzo przydatna jeśli potrzebujesz zrobić jakieś modyfikacje na danych przychodzących zanim zostaną przekonwertowane na encje. Na przykład jeśli chcemy username użytkownika zawsze przekonwertować do małych liter wystarczy, że w klasie tabeli lub behaviora dodamy kod jak poniżej:

use Cake\Event\Event;
use ArrayObject;

// In a table or behavior class
public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
    if (isset($data['username'])) {
        $data['username'] = mb_strtolower($data['username']);
    }
}
beforeMarshal jest wywoływane tuż przed walidacją. Ponadto dane w beforeMarshal są kopią przekazanych danych. Jest tak, ponieważ ważne jest, aby zachować oryginalne dane wejściowe użytkownika, aby można je było wykorzystać w innym miejscu.