Php Yii:在验证失败后保留上载的文件?
如果我用YII上传一个文件,而另一个规则失败,那么用户必须再次选择该文件。避免这种情况的最简单方法是什么 例如,我有一个规则,标题最多必须是20个字符。用户输入21个字母。他选择了一个要上传的文件。当用户返回到页面时,文件不再存在,他必须再次选择它,并有效地再次上传。这是非常令人沮丧的,尤其是现在,当用户需要上传多达十个文件时 我知道Drupal是这样工作的。如果上载和其他规则失败,则返回表单时,文件将显示为屏幕截图。如何在YII上获得相同的功能 更新Php Yii:在验证失败后保留上载的文件?,php,file-upload,yii,Php,File Upload,Yii,如果我用YII上传一个文件,而另一个规则失败,那么用户必须再次选择该文件。避免这种情况的最简单方法是什么 例如,我有一个规则,标题最多必须是20个字符。用户输入21个字母。他选择了一个要上传的文件。当用户返回到页面时,文件不再存在,他必须再次选择它,并有效地再次上传。这是非常令人沮丧的,尤其是现在,当用户需要上传多达十个文件时 我知道Drupal是这样工作的。如果上载和其他规则失败,则返回表单时,文件将显示为屏幕截图。如何在YII上获得相同的功能 更新 如果我可以满足这个要求,而不要求用户按st
如果我可以满足这个要求,而不要求用户按start upload,我就可以免费使用xupload包装的原始插件,您还可以使用一个额外的回调选项: 在xupload wiki中,访问这些附加选项的方式如下:
<?php
$this->widget('xupload.XUpload', array(
// ... other attributes
'options' => array(
//This is the submit callback that will gather
//the additional data corresponding to the current file
'submit' => "js:function (e, data) {
var inputs = data.context.find(':input');
data.formData = inputs.serializeArray();
return true;
}"
),
));
?>
您可以和。因此,在发送表单和上载文件之前,您的常规属性将得到验证。您可以使用会话进行验证
在控制器中
// Here I have taken Users as model. you should replace it as your need.
$model=new Users;
if(isset($_POST['Users']))
{
$model->attributes=$_POST['Users'];
//save file in session if User has actually selected a file and there weren't any errors.
if(isset($_FILES['Users']) && $_FILES['Users']['error']['image'] == 0){
Yii::app()->session['image'] = $_FILES['Users'];
}
if(isset(Yii::app()->session['image']) && !empty(Yii::app()->session['image'])){
$model->image = Yii::app()->session['image'];
$model->image = CUploadedFile::getInstance($model,'image');
}
if($model->save())
{
if(!empty($model->image)){
$model->image->saveAs(Yii::app()->basePath.'/images/'.time()."_".$model->image->name);
unset(Yii::app()->session['image']);
//File has successfully been uploaded.
}
// redirect to other page.
}
}
else{
// remember to unset the session variable if it's a get request.
unset(Yii::app()->session['image']);
}
在您的视图文件中
//Your form fields
//This is to show user that he has already selected a file. You could do it in more sofisticated way.
if(isset(Yii::app()->session['image']) && !empty(Yii::app()->session['image'])) {
echo "<label>".Yii::app()->session['image']['name']['image']."</label><br>";
}
//File uplaod field.
//More form Fields.
//您的表单字段
//这是为了向用户显示他已经选择了一个文件。你可以用更具体的方式来做。
if(设置(Yii::app()->会话['image'])&&&!空(Yii::app()->会话['image'])){
echo“.Yii::app()->会话['image']['name']['image']。”
;
}
//文件上传字段。
//更多表单字段。
希望有帮助