Я пытаюсь создать форму поля загрузки в yii, и когда вы загружаете большой файл и нажимаете «Отправить», я получаю сообщение об ошибке частичной загрузки.
Я понимаю, что это потому, что я не позволил файлу быть загруженным должным образом, и у меня также есть мой php.ini, настроенный должным образом, чтобы обработать 20-мегабайтные сообщения и загрузить также.
Что я хочу, это когда файл загружается, я хочу изменить кнопку на что-то другое или просто удалить ее, пока файл не будет загружен должным образом.
Как я могу это сделать?
мой _form имеет следующий код
<?php
/* @var $this ImageController */
/* @var $model Image */
/* @var $form CActiveForm */
?>
<script>
$('input:submit').click(function(){
$('p').text("Form submiting.....");
$('input:submit').attr("disabled", true);
});
</script>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'image-form',
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model);?>
<div class="row">
<?php echo $form->labelEx($model,'imageUrl'); ?>
<?php echo $form->fileField($model,'imageUrl',array('size'=>50,'maxlength'=>50)); ?>
<?php echo $form->error($model,'imageUrl'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Upload' ,array('class'=>'button')); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
В то время как мой контроллер создания имеет следующий код
if(isset($_POST['Image']))
{
//Getting the values via Post
$model->attributes=$_POST['Image'];
//Seeting the homeId to always be Default
$model->homeId = self::HOME_ID;
//Generating a new name for the file
$fileName = mt_rand();
//Make a FILE superglobal withthe imageUrl information
$uploadedFile=CUploadedFile::getInstance($model,'imageUrl');
//Checking if the name is alredy taken
$checkName = Image::model()->findAllByAttributes(array('imageUrl'=>$fileName));if(empty($checkName)){//If the value of the query is empty
//Assigning the value of random number to the imageUrl
$model->imageUrl = $fileName;
//Assigning the value of the the extenstion to the imageExtension
if($model->save()){
//Moveing the uploaded file
$uploadedFile->saveAs("images/upload/index/".$fileName);
Yii::app()->user->setFlash('success',"File uploaded successfully");
}
}else{//Display error
Yii::app()->user->setFlash('error',"Please try again");
}
}else{
Yii::app()->user->setFlash('error',"Fill in all the data");
}
$this->render('create',array(
'model'=>$model,
));
}
Просто добавьте событие onclick к вашей кнопке «Отправить», которая отключит кнопку, и когда ваша загрузка будет завершена или прервана, снова включите ее.
$('input:submit').click(function(){
$('p').text("Form submiting.....");
$('input:submit').attr("disabled", true);
});
Нечто подобное вы будете работать из коробки в yii
Yii::app()->clientScript->registerScript('search', "$('form#id').submit(function(){
$(this).find('input[type=submit]').attr('disabled', 'disabled');
});
", CClientScript::POS_READY);
Других решений пока нет …