Project hasMany Photosのような関係と、Photo.imageの最も単純な検証(添付が必要)ルールがあります。
しかし、1つのファイルを追加してプロジェクトを追加する場合は問題ありませんが、多くの入力タイプのファイルを作成し、一部が添付ファイルあり、一部が添付されていない場合、ルールは適切に機能しません。
...少なくとも1つのファイルが必要なので、これをどのように解決しますか?
プロジェクトには、最低1枚の写真が必要な多くの写真があります...
Project hasMany Photosのような関係と、Photo.imageの最も単純な検証(添付が必要)ルールがあります。
しかし、1つのファイルを追加してプロジェクトを追加する場合は問題ありませんが、多くの入力タイプのファイルを作成し、一部が添付ファイルあり、一部が添付されていない場合、ルールは適切に機能しません。
...少なくとも1つのファイルが必要なので、これをどのように解決しますか?
プロジェクトには、最低1枚の写真が必要な多くの写真があります...
実際には、モデルの検証である必要があります。これは、2つの間に「プロジェクトに1対Mの写真がある」関係を作成しようとしているためです。したがって、この検証は、プロジェクトモデルのbeforeValidate関数で実行する必要があります。
プロジェクトモデル
function beforeValidate(){
if( !isset($this->data['Photo']) || count($this->data['Photo']) == 0)
return false;
else
return true;
}
残りはCakePHPの検証ルールによって正しく処理されます。
モデルの検証ではなく、アプリケーションレベルのロジックと見なす必要があります。
ユーザーにコントローラーから少なくとも1枚の写真をアップロードするように強制します。
複数のアップロードフィールドがあることを前提としています
echo $form->input("Photo.0.file", $options);
echo $form->input("Photo.1.file", $options);
echo $form->input("Photo.2.file", $options);
//form submited
if (!empty($this->data)) {
$total_uploaded = 0;
foreach ($this->data['Photo'] as $i => $record) {
if (empty($record['file'])) { //some field leave blank
unset($this->data['Photo'][$i]);
//continue;
}else{
$total_uploaded ++;
}
}
//check at lease 1 file
if($total_uploaded > 0){
//validate and saveAll()
}
}