W bardzo prostu sposób nazywasz sobie funkcje jak tam chcesz i walidujesz argument wejściowym, którym jest $field ($key -> nazwa pola, $value -> wartość walidowanego pola). Ja kwiesz pliki uplodowane FormHelperem posadają tablice z name,tmp_name,size, error oraz type, więc mają taka wiedzę stworzysz sobie behavior np taki (używam go do walidacji obrazków w projekcie):
<?php
/*
* Behavior validate, waliduje pliki
* @author R4D3K <panbogactwa@tlen.pl>
* @copyright Copyright (c) 2011-05-16 13:34:28, Radosław Wawrzyniak
*/
class FileValidatorBehavior extends ModelBehavior {
/**
* Sprawdza czy dany plik jest bmp,jpg,jpeg,gif,png
* @param type $model aktualny model
* @param type $field nazwa pola
* @param type $empty jeśli true plik może być pusty (odpowiednik allowEmpty)
* @return type boolean
*/
public function checkImage(&$model, $field, $empty = false) {
if($data['error'] != 0) {
if($empty) return true;
else return false;
}
else {
if(($data['type'] != 'image/jpeg') &&
($data['type'] != 'image/jpg') &&
($data['type'] != 'image/gif') &&
($data['type'] != 'image/x-png') &&
($data['type'] != 'image/pjpeg') &&
($data['type'] != 'image/png'))
return false;
else return true;
}
}
}
?>
Dodam że ja mam behavior FileValidator, która posiada jeszcze innych kilka pozytecznych reguł jak np sprawdzenia czy plik jest flashem pdfem itp.
I teraz jak korzystać?
Prosto (jakiś tam model tablica $validate):
public $validate = array( 'avatar'=> array('rule1'=> array('rule'=> array('checkImage', true), 'message'=> 'Proszę załączyć prawidłowy plik graficzny')), );
Jak widzisz w tablicy podajesz nazwę metody i dalej parametry więcej info znajdziesz w booku cake. Jeśli chodzi o is_uploaded file to z racje tego ze uploadowane pliki często trafiają do różnych katalogów (avatary usera gdzie indziej niż img do newsów), najlepiej wcisnąć to w afterSave danego modelu i nie musisz jużsprawdzacz czy is_uploaded_file() odrazu dajesz move_uploaded_file.