Я пытаюсь добавить поле загрузки файла в форму в YII, в то время как он успешно отправляет и загружает файл в нужную папку, не добавляя ничего в базу данных.
Я только изучаю эту платформу, чтобы любое руководство было замечательным.
Вот мое мнение …
<div class="row"> <div class="span4"><?php echo $form->labelEx($model,'slider_image'); ?></div> <div class="span5"><?php echo $form->fileField($model,'slider_image'); ?></div> <div class="span3"><?php echo $form->error($model,'slider_image'); ?></div> </div>
Вот мой контроллер …
public function actionEdit() { $id = Yii::app()->getRequest()->getQuery('id'); $model = CustomPage::model()->findByPk($id); if (!($model instanceof CustomPage)) { Yii::app()->user->setFlash('error',"Invalid Custom Page"); $this->redirect($this->createUrl("custompage/index")); } if(isset($_POST['CustomPage'])) { $model->attributes = $_POST['CustomPage']; $model->image=CUploadedFile::getInstance($model,'slider_image'); if ($model->validate()) { if ($model->deleteMe) { $model->delete(); Yii::app()->user->setFlash('info',"Custom page has been deleted"); $this->redirect($this->createUrl("custompage/index")); } else { $model->request_url = _xls_seo_url($model->title); if (!$model->save()) { Yii::app()->user->setFlash('error',print_r($model->getErrors(),true)); } else { $model->image->saveAs(Yii::app()->baseUrl.'images/'.$model->image); Yii::app()->user->setFlash('success', Yii::t('admin','Custom page updated on {time}.',array('{time}'=>date("d F, Y h:i:sa")))); $this->beforeAction('edit'); //In case we renamed one and we want to update menu } } } } }
и моя модель
public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( // other rules array('slider_image', 'file', 'types'=>'jpg, gif, png'), ); }
Сама форма в целом работает нормально, к сожалению, я не понимаю, как YII добавляет в базу данных
благодаря
Адриан
EDIT: Ive также, очевидно, получил поле slider_image
в этой таблице
Что ваш код контроллера будет делать, это сохранить имя файла загруженного файла в таблице базы данных. Другое дело: ваш код:
$model->image=CUploadedFile::getInstance($model,'slider_image');
ссылается на неправильный атрибут. Я думаю, это должно быть:
$model->slider_image=CUploadedFile::getInstance($model,'slider_image');
Наконец, вам нужно вызвать $model->slider_image->save('path.to.file');
для сохранения файла на диск
Я считаю, что вы получаете акции в $model->validate()
. Поскольку вы копируете изображение выше этой строки, копирование в порядке, но вы не проходите проверку, чтобы он никогда не сохранял DB.
var_dump($model->validate());
посмотреть, что происходит …