Josegonzalez\Upload\Model\Behavior\UploadBehavior::beforeSave PHP Method

beforeSave() public method

Modifies the entity before it is saved so that uploaded file data is persisted in the database too.
public beforeSave ( Cake\Event\Event $event, Cake\ORM\Entity $entity, ArrayObject $options ) : void | false
$event Cake\Event\Event The beforeSave event that was fired
$entity Cake\ORM\Entity The entity that is going to be saved
$options ArrayObject the options passed to the save method
return void | false
    public function beforeSave(Event $event, Entity $entity, ArrayObject $options)
    {
        foreach ($this->config() as $field => $settings) {
            if (Hash::get((array) $entity->get($field), 'error') !== UPLOAD_ERR_OK) {
                if (Hash::get($settings, 'restoreValueOnFailure', true)) {
                    $entity->set($field, $entity->getOriginal($field));
                    $entity->dirty($field, false);
                }
                continue;
            }
            $data = $entity->get($field);
            $path = $this->getPathProcessor($entity, $data, $field, $settings);
            $basepath = $path->basepath();
            $filename = $path->filename();
            $data['name'] = $filename;
            $files = $this->constructFiles($entity, $data, $field, $settings, $basepath);
            $writer = $this->getWriter($entity, $data, $field, $settings);
            $success = $writer->write($files);
            if ((new Collection($success))->contains(false)) {
                return false;
            }
            $entity->set($field, $filename);
            $entity->set(Hash::get($settings, 'fields.dir', 'dir'), $basepath);
            $entity->set(Hash::get($settings, 'fields.size', 'size'), $data['size']);
            $entity->set(Hash::get($settings, 'fields.type', 'type'), $data['type']);
        }
    }

Usage Example

Beispiel #1
0
 /**
  * Every time the image is saved, the file is renamed. This eliminate the
  * need to handle cache busting in the browser.
  *
  * @param \Cake\Event\Event $event The beforeSave event that was fired
  * @param \Cake\Datasource\EntityInterface $entity The entity that is going to be saved
  * @param \ArrayObject $options the options passed to the save method
  * @return void
  */
 public function beforeSave(Event $event, Entity $entity, ArrayObject $options)
 {
     $entity->set('uniqid', uniqid());
     parent::beforeSave($event, $entity, $options);
 }