1

ファイルフィールドが空でない場合、フィールドを検証しようとしています。したがって、誰かがファイルをアップロードしようとしている場合は、別のフィールドを検証して、アップロードするものが選択されていることを確認する必要がありますが、フィールドが空でない場合にのみルールを実行する方法がわかりません。

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('full_name, gender_id','required'),
        array('video', 'file', 'types'=>'mp4', 'allowEmpty' => true),
        array('audio', 'file', 'types'=>'mp3', 'allowEmpty' => true),
        array('video','validateVideoType'),
    );
}

public function validateVideoType() {
    print_r($this->video);
    Yii::app()->end();
}

だからthis->video、私が何かをアップロードしたかどうかにかかわらず、常に空です。その変数が設定されているかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

2

カスタム検証関数を適切に定義する必要があります。常に$attribute&という 2 つのパラメーターがあります$params

public function validateVideoType($attribute, $params) {
    print_r($this->video);
    Yii::app()->end();
}

これで、独自の検証方法を記述する必要があります。私はそれがうまくいくと確信しています。

于 2012-10-15T07:13:45.317 に答える
0

jQuery/javascript で確認できます。'new_document' は入力ファイル フィールドの名前です。

if ($("#new_document").val() != "" || $("#new_document").val().length != 0) {
        //File was chosen, validate requirements
        //Get the extension
        var ext = $("#new_document").val().split('.').pop().toLowerCase();
        var errortxt = '';
        if ($.inArray(ext, ['doc','docx','txt','rtf','pdf']) == -1) {
            errortxt = 'Invalid File Type';
            //Show error
            $("#document_errors").css('display','block');
            $("#document_errors").html(errortxt);

            return false;
        }

        //Check to see if the size is too big
        var iSize = ($("#new_document")[0].files[0].size / 1024);
        if (iSize / 1024 > 5) {
            errortxt = 'Document size too big. Max 5MB.';
            //Show error
            $("#document_errors").css('display','block');
            $("#document_errors").html(errortxt);

            return false
        }
    } else {
        //No photo chosen
        //Show error
        $("#document_errors").css('display','block');
        $("#document_errors").html("Please choose a document.");
        return false;
    }

このコードは明らかにあなたのニーズに完全ではありませんが、必要なものをまとめる必要があるかもしれません.

于 2012-10-14T21:46:44.007 に答える