今回は前回の記事でBLOBなカラムにファイルのバイナリを追加する方法を紹介したので、保存時にValidationをかける方法を追加したいと思います。
Validationをかける項目としては以下です。
- ファイルサイズ5MB以下
- ファイルタイプPDF
PDFを追加するコントローラは以下のようにします。
public function add(){ $postData = $this->request->getData(); if(!empty($postData['pdf']['tmp_name'])){ $upFiles = $this->request->getUploadedFiles(); $data = [ 'file' => $upFiles['pdf']->getStream(), 'file_name' => $upFiles['pdf']->getClientFileName(), 'file_type' => $upFiles['pdf']->getClientMediaType(), 'file_size' => $upFiles['pdf']->getSize(), ]; $documents = $this->Documents->newEntity($data); // ここでValidation $this->Documents->save($documents); } }
ここで、DocumentsTable.phpにおいて、以下のようにValidatorを更新します。
$validator ->add( 'file_type', 'file_validity', [ 'rule' => function($value, $context){ return $value == 'application/pdf'; }, 'message' => 'アップロードできるファイルの形式はPDFのみです', ->add( 'file_size', 'file_validity', [ 'rule' => function($value, $context){ return $value <= 5 * 1024 * 1024; }, 'message' => "アップロードできるファイルの上限は5MBまでです" ] );
これでValidationがかかるはずです。 PopplerPhpなどを活用するとpdfのページ数や用紙の種類(A4とか)でもValidationがかけられるようになります。