CakePHP3でJosegonzalez/Upload を使ってバリデートを行う

バリデートルールは以下に記載されています。

http://cakephp-upload.readthedocs.io/en/latest/validation.html

CakePHPにもデフォルトでuploadedFileのバリデートがありますが、使いづらいため、Josegonzalez/Upload のバリデートを使うと良さそうです。

    /**
     * Default validation rules.
     *
     * @param \Cake\Validation\Validator $validator Validator instance.
     * @return \Cake\Validation\Validator
     */
    public function validationDefault(Validator $validator)
    {
        // バリデータにプロバイダーを追加
        $validator->setProvider('upload', 'Josegonzalez\Upload\Validation\DefaultValidation');

        $validator ->add('image', [
                'uploadedFile' => [
                    'rule' => ['uploadedFile', ['types' => ['image/jpeg','image/png','image/gif']]],
                    'last' => true,
                    'message' => 'gif , jpeg , png のみアップロード可能です。'
                ]
            ])
            ->add('image', 'fileUnderPhpSizeLimit', [
                'rule' => 'isUnderPhpSizeLimit',
                'message' => 'ファイルサイズが大きすぎます。',
                'provider' => 'upload'
            ])
            ->add('image', 'fileUnderFormSizeLimit', [
                'rule' => 'isUnderFormSizeLimit',
                'message' => 'ファイルサイズが大きすぎます。',
                'provider' => 'upload'
            ])
            ->add('image', 'fileAboveMinHeight', [
                'rule' => ['isAboveMinHeight', 200],
                'message' => '画像ファイルは少なくとも 200px 以上の高さのものにしてください。',
                'provider' => 'upload'
            ])
            ->add('image', 'fileBelowMaxHeight', [
                'rule' => ['isBelowMaxHeight', 2000],
                'message' => '画像ファイルは少なくとも 2000px 以下の高さのものにしてください。',
                'provider' => 'upload'
            ])
            ->add('image', 'fileAboveMinWidth', [
                'rule' => ['isAboveMinWidth', 200],
                'message' => '画像ファイルは少なくとも 200px 以上の幅のものにしてください。',
                'provider' => 'upload'
            ])
            ->add('image', 'fileBelowMaxWidth', [
                'rule' => ['isBelowMaxWidth', 2000],
                'message' => '画像ファイルは少なくとも 2000px 以下の幅のものにしてください。',
                'provider' => 'upload'
            ]);

        return $validator;
    }