我有一个只有一个字段的表单。
<?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被设置。
是否有一种很好的方法只允许表单中的一个图像上传字段
答案 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');
}
}