ファイルのアップロードを処理するために、CakePHP アプリケーションで単純なモデル動作を作成しました。そのbeforeValidate()
方法には、次のものがあります。
public function beforeValidate(Model $Model, $options = array()) {
$maxFileSize = '1MB';
$Model->validator()->add($this->settings[$Model->alias]['field'], array(
'extension' => array(
'rule' => array('extension', $this->settings[$Model->alias]['allowedExtensions']),
'message' => __('Please supply a valid image'),
'allowEmpty' => ($this->settings[$Model->alias]['required'] === false)
),
'fileSize' => array(
'rule' => array('fileSize', '<=', $maxFileSize),
'message' => __('Image must be less than %s', $maxFileSize)
),
'uploadError' => array(
'rule' => 'uploadError',
'message' => __('Something went wrong with the upload')
)
));
return true;
}
ファイル フィールド関連の検証を動的に追加しています。最初のルールは、動作設定で渡された拡張子の許可された配列に拡張子が含まれていることを確認することです。この場合、ファイルのアップロードは必須ではないため、これallowEmpty
に相当するキーがあります。true
この動作はEvent
クラスに関連付けられています。イベントを編集するとき、私allowEmpty
がtrue
. どうしてこれなの?
ファイルフィールドに渡されたデータが配列であり、実際には空ではないため、検証が開始されているためですか? もしそうなら、どうすればこれに対抗できますか?ファイルが実際にアップロードされた場合にのみ検証を開始したい。