我尝试将文件上传字段添加到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如何添加到数据库
由于
阿德里安
编辑:我显然在该表中有一个slider_image
字段
答案 0 :(得分:2)
您的Controller代码将执行的操作是将上载文件的文件名保存在数据库表中。另一件事是:你的代码:
$model->image=CUploadedFile::getInstance($model,'slider_image');
指的是错误的属性。我认为应该是:
$model->slider_image=CUploadedFile::getInstance($model,'slider_image');
最后,您需要调用$model->slider_image->save('path.to.file');
才能将文件保存到磁盘
答案 1 :(得分:0)
我相信你会在$model->validate()
获得股票。因为您在此行上方复制图像,所以复制很好,但您没有通过验证,因此它永远不会保存到DB。
var_dump($model->validate());
看看发生了什么......