如果文件字段不为空,则验证另一个字段

时间:2012-10-14 21:31:54

标签: php yii

如果文件字段不为空,我正在尝试验证字段。因此,如果有人试图上传文件,我需要验证另一个字段以确保他们选择了他们正在上传的内容,但是我不知道如何查看或仅在字段不为空时运行规则。

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始终为空。如何检查是否设置了该变量?

2 个答案:

答案 0 :(得分:2)

必须正确定义自定义验证功能。它有两个参数$attribute& $params

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

现在,您应该编写自定义方式进行验证。 我相信这样会很好。

答案 1 :(得分: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;
    }

这段代码显然不能完美满足您的需求,但可能需要将您需要的内容组合在一起。