Yii表单有一个上传字段

时间:2013-06-15 10:49:24

标签: yii

我有一个只有一个字段的表单。

<?php echo $form->fileFieldRow($model,'img',array('rows'=>6, 'cols'=>50)); ?>

在我的模型中我设置了img是必需的

array('img', 'required'),

我添加了一些文件验证规则

array('img', 'file', 'types'=>'jpg, gif, png' , 'maxFiles'=>'1'),           

选择图像并按提交后。我收到'img'是必需的错误。 这是因为img未在 Post 中设置,而是在 Files 中设置。所以它没有看到img被设置。

是否有一种很好的方法只允许表单中的一个图像上传字段

1 个答案:

答案 0 :(得分:2)

在表单中试试

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'imageGallery-form',
    'action'=>Yii::app()->createAbsoluteUrl('/Controller/action'),
    'enableClientValidation'=>true,
    'clientOptions'=>array(
    'validateOnSubmit'=>true,
        ),
    'htmlOptions'=>array('enctype'=>'multipart/form-data'),// This is required for file upload
    )); ?>

<div class="row">
        <span class="span-4">Uplaod images:</span>
        <?php echo $form->fileField($model,'Img',array('id'=>'file')); ?>
     ?>
</div>

添加一些脚本以验证文件字段

<script type="text/javascript">
$('#imageGallery-form').live("submit", function(event){
    var success = true;
    $form = $(this);
     if(/.*\.(gif)|(jpeg)|(jpg)|(doc)$/.test($("#file").val().toLowerCase())){
         $("#fname").removeClass("error");
    }else{
        $("#error_ul").append("<li>Please Choose Gif or Jpg Images Only.!!</li>");
        $(".errorSummary").show();
        $("#fname").addClass("error");
        success = false;
    }

}); 
</script>

在Controller端访问图像,如图所示

public function actionGetImage(){
    if(isset($_POST['imageUploadBtn'])){
        $Img=CUploadedFile::getInstance($model, 'Img');
    }

}