2

ファイルには次の検証ルールがあります。

モデルファイル.php

public $validate = array(
    'image' => array(
        'maxWidth' => array(
            'rule' => array('maxWidth', 2000),
        ),
        'maxHeight' => array(
            'rule' => array('maxHeight', 2000),
        ),
        'extension' => array(
            'rule' => array('extension', array('gif', 'jpg', 'png', 'jpeg')),
        ),
        'filesize' => array(
            'rule' => array('filesize', 5120000),
        )
    )
);

画像が空の場合、検証をスキップする方法はありますか?

4

3 に答える 3

2

画像が空であるかアップロードされていないかどうかを確認する方法を調整する必要があるかもしれません-私が持っているものが正しいかどうかはわかりません。ただし、検証ルールを確認して設定を解除するのが目的です。

public function beforeValidate($options = array()) {
    if (empty($this->data[$this->alias]['image']['name'])) {
        unset($this->validate['image']);
    }

    return true;
}
于 2012-09-18T19:12:40.923 に答える
1

下記URL参照

ファイルアップロードの CakePHP オプションの検証

または試してみてください

"I assign $this->data['Catalog']['image'] = $this->data['Catalog']['imageupload']['name'];"

したがって、データ配列を保存するまでに、次のようになります。

array(
    'image' => 'foobar',
    'imageupload' => array(
        'name' => 'foobar',
        'size' => 1234567,
        'error' => 0,
        ...
     )
)

つまり、imageupload 検証ルールは次のデータで機能しようとしています。

array(
    'name' => 'foobar',
    'size' => 1234567,
    'error' => 0,
    ...
 )

つまり、検証しようとしている値は、単なる文字列ではなく、ものの配列です。また、指定された検証規則に合格する可能性は低いです。また、おそらく「空」になることはありません。

この配列を処理できるカスタム検証ルールを作成するか、検証を試みる前にコントローラーでさらに処理を行う必要があります。

于 2012-09-18T19:07:03.687 に答える
0

私が知る限り、これを $validate 変数に設定するコードはありません。したがって、あなたがしなければならないことは次のとおりです。

対応するモデルの beforeValidate に、次のコードを追加します。

<?php   
# Check if the image is set. If not, unbind the validation rule
# Please note the answer of Abid Hussain below. He says the ['image'] will probably
# never be empty. So perhaps you should make use of a different way to check the variable
if (empty($this->data[$this->alias]['image'])){
    unset($this->validate['image']);
}

http://bakery.cakephp.org/articles/kiger/2008/12/29/simple-way-to-unbind-validation-set-remaining-rules-to-requiredを主な記事として使用しました。しかし、この関数はデフォルトのケーキ変数ではないようです。上記のコードは機能するはずです。

于 2012-09-18T19:00:40.210 に答える