文件类型验证不起作用


file type valdiation not work

我创建了用于上传文件的表单,还创建了用于验证类型的模型。如果我上传php文件或者其他文件,但在模型中,我添加了文件类型就是"jpg,gif, png,pdf,rar,zip,doc,docx"

如何修复?

视图:

.......
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'Cfiles-form',
   /*
        'enableAjaxValidation'=>true,
        'enableClientValidation'=>true,
        'clientOptions'=>array('validateOnSubmit'=>true), //This is very important
       */
       'clientOptions'=>array('validateOnSubmit'=>true), //This is very important
       'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>
<?php
/// difine Section model 
$models=new Courses;
?>
<?php echo $form->errorSummary($model,'يرجى تعديل الأخطاء التالية'); ?>
<table>
<h3> إضافة ملفات الدورات</h3>
<tr>
    <td>
        <div class="row">
        <?php echo $form->labelEx($model,'title'); ?>
        <?php echo $form->textField($model,'title',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'title'); ?>
    </div>
    </td>
</tr>
<tr>
    <td>
            <div class="row">
        <?php echo $form->labelEx($model,'desc'); ?>
        <?php echo $form->textField($model,'desc',array('size'=>60,'maxlength'=>600)); ?>
        <?php echo $form->error($model,'desc'); ?>
    </div>
    </td>
</tr>
<tr>
    <td>
    <div class="row">
        <?php echo $form->labelEx($model,'file'); ?>
        <?php echo $form->fileField($model,'file'); ?>
        الملفات المسموحة : jpg,gif, png,pdf,rar,zip,doc,docx
        <?php echo $form->error($model,'file'); ?>
    </div>
    </td>
</tr>
.......

模型:

....
public function rules(){
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('title, desc,  privacy', 'required','message'=>'يرجى ملئ حقل {attribute}  '),
            array('privacy', 'numerical', 'integerOnly'=>true),
            array('title', 'length', 'max'=>255),
            array('desc', 'length', 'max'=>600),
             array('file', 'file', 'types'=>'jpg,gif, png,pdf,rar,zip,doc,docx','allowEmpty'=>true, 'on'=>'update'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('f_id, title, desc, file, privacy', 'safe', 'on'=>'search'),
        );
    }
.....

控制器:

public function actionCreate()
    {
        $model=new Cfiles;
        $models= new Courses;
        // Uncomment the following line if AJAX validation is needed
    $this->performAjaxValidation($model);
        if(isset($_POST['Cfiles'])){
            $model->attributes=$_POST['Cfiles'];
            $valdiate=$model->validate();
         /////// upload image functions 
         $rnd = rand(0,999984375);  // generate random number between 0-9999
         $model->attributes=$_POST['Cfiles']['file'];
         $uploadedFile=CUploadedFile::getInstance($model,'file');
        if(!empty($uploadedFile)){
            $ext=$uploadedFile->getExtensionName();
            $fileName = "samilox$rnd.{$ext}";  // random number + file name
            }
             ////////// end 
            if($model->save()){
                    if(!empty($uploadedFile))  // check if uploaded file is set or not
                {
                 $uploadedFile->saveAs(Yii::app()->basePath.'/../cfillaf/'.$fileName);  // upload image to server 
                  $model->file = $fileName;
                  $model->save(false);
               }   
              echo " Work ";
              $this->redirect(array('cfiles/admin'));
       }
                else{
          echo " error";
                $this->redirect(array('cfiles/admin'));
                }
        }
         $this->layout='adminsidebar';
         if(Yii::app()->request->getIsAjaxRequest())
          echo $this->renderPartial('_form',array('model'=>$model),true,true);//This will bring out the view along with its script.
                else $this->render('create',array(
                        'model'=>$model,
                ));
        }

Thanks in advance

删除模型文件规则函数中的'on'=>'update'来解决你的问题。

阵列("文件"、"文件"、"类型"=>"jpg, gif, png, pdf, rar压缩,医生,多克斯","allowEmpty"=> true, ' ' => '更新' ),

Thanks book .dev

是的,我忘记在插入场景中添加validate

代码:

array('file', 'file', 'types'=>'jpg,gif, png,pdf,rar,zip,doc,docx','allowEmpty'=>false, 'on'=>'insert'),