PDA

View Full Version : مشکل با ajax upload ؟ (حل شد)



redhat2
پنج شنبه 08 اسفند 1392, 23:29 عصر
سلام به دوستان من این کد ها را نوشتم :



class UploaderController extends Controller {

public function actionIndex() {
$model = new UploaderForm();
$this->render('index', array('model' => $model));
}

public function actionAjax() {
$model = new UploaderForm();
if (isset($_POST['UploaderForm'])) {
$model->file = $_POST['UploaderForm']['file'];
if ($model->validate()) {
echo CJSON::encode(array('saeed' => $model->getError('file')));
}
}
}

}


uploadform :




class UploaderForm extends CFormModel {

public $file;

public function rules() {
return array(
array(
'file', 'file', 'allowEmpty' => true, 'types' => 'jpg'
)
);
}

}

?>


index.php :




/* @var $this UploaderController */
$form = $this->beginWidget('CActiveForm', array(
'id' => 'uploader-form',
'enableAjaxValidation' => false,
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
'validateOnChange' => false,
),
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
?>
<div class="row">
<?php echo $form->labelEx($model, 'file'); ?>
<?php echo $form->fileField($model, 'file'); ?>
<?php echo $form->error($model, 'file'); ?>
</div>
<div class="row">
<?php
echo CHtml::ajaxSubmitButton('click', $this->createUrl('uploader/ajax'), array(
'type' => 'Post',
'dataType' => 'json',
'data' => array(
'UploaderForm[file]' => "js:$('#UploaderForm_file').val()",
),
'success' => 'function(result){
alert(result.saeed);
}'
));
?>
</div>
<?php
$this->endWidget();
?>


حالا 2 تا مشکل دارم اول اینکه validate که در Controller صدا زدم کار نمیده یعنی من فایلی با پسوند pdf را می فرستم سمت سرور که در این حالت جواب validate باید منفی باشه و ارور مربوطه را به من بده که نمیده null بر میگردونه دوما اینکه من وقتی که به این صورت در متد کنترلر عمل می کنم ،



$model->attributes = $_POST['UploaderForm'];



هیچی set نمیشه که بخواد validate بشه برای همین من در index اومد و در قسمت ajaxoption ، دیتا را اونطوری تعریف کردم ولی باز فایده نداره و اصلا هیچی validation انجام نمیشه میدونید مشکل کجاست ؟ ممنون میشم کمک کنین .

redhat2
شنبه 10 اسفند 1392, 18:57 عصر
کسی نبود ؟

masato
شنبه 10 اسفند 1392, 22:07 عصر
از CActiveRecord استفاده کن

redhat2
شنبه 10 اسفند 1392, 23:12 عصر
یعنی جه جوری ؟ یعنی ارث بری را از cformmodel به cactiveform تغییر بدم ؟

MMSHFE
دوشنبه 12 اسفند 1392, 10:26 صبح
کد مدل UploaderForm و Validator موردنظر رو هم بگذارین.

engmmrj
چهارشنبه 14 اسفند 1392, 17:39 عصر
CAtiveForm همچین قابلیتی نداره !!! یعنی Yii ضعیف تر از این حرفاس که آپلود فایل داشته باشه !
من Extenstios نصب کردم تا توانستم این مشکل را برطرف کنم !

MMSHFE
چهارشنبه 14 اسفند 1392, 17:47 عصر
باز از این حرفها گفتین! عزیز دل، قرار نیست هسته فریمورک تمام قابلیتهایی که یکنفر ممکنه به ذهنش برسه رو توی هسته خودش بگذاره وگرنه خود فریمورک 1 گیگابایت میشد! تازه اونوقت دیگه کسی Extension نمیساخت و قابلیت توسعه معنا نداشت. فکر میکنید چند درصد پروژه ها نیاز به AJAX Upload دارن که تیم توسعه Yii بخواد اون رو توی هسته قرار بده؟ اتفاقاً اینکه یک Extension برای این کار داره، نشانه جامعه کاربری فعال این فریمورک هست.