0

我创建了表单来上传文件,还创建了模型来验证类型。如果我上传 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,
                ));

        }

提前致谢

4

2 回答 2

1

删除模型文件规则功能中的 'on'=>'update' 以解决您的问题。

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

于 2013-01-19T14:22:32.973 回答
0

感谢 Bool.dev

是的,我忘了在插入场景中添加验证

代码 :

array('file', 'file', 'types'=>'jpg,gif, png,pdf,rar,zip,doc,docx','allowEmpty'=>false, 'on'=>'insert'),
于 2013-01-19T14:10:49.517 回答