在我的网络应用程序中,我需要在创建记录时上传图像。但我收到错误,虽然我按照yii论坛中给出的说明 这是我得到的错误。
Application Log
Timestamp Level Category Message
16:50:00.207452 warning application
Failed to set unsafe attribute "image" of "Vegetable".
in
/var/www/affm_web_v1r2_xxxx_untouched/protected/controllers/VegetableController.php
(29)
in /var/www/affm_web_v1r2_xxxxuntouched/index.php (7)
我正在使用对话框创建新记录。 我的控制器代码
public function actionCreate()
{
$model=new Vegetable;
if (Yii::app()->request->isAjaxRequest)
{
$this->renderPartial('create', array('model'=>$model, 'asDialog'=>!empty($_GET['asDialog']),), false, true);
Yii::app()->user->setReturnUrl($_GET['returnUrl']);
Yii::app()->end();
}
else
{
if(isset($_POST['Vegetable']))
{
$model->attributes=$_POST['Vegetable'];
$model->image=CUploadedFile::getInstance($model,'image');
if($model->save())
{
$model->image->saveAs((Yii::app()->baseUrl.'/images/vegetables/').$model->image);
$this->redirect(Yii::app()->user->returnUrl);
}
// $this->render('create', array('model'=>$model));
}
}
我的视图页面代码
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'=>'vegetable-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>
<p class="help-block">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<?php echo $form->textFieldRow($model,'name',array('class'=>'span5','maxlength'=>64)); ?>
<?php echo $form->textFieldRow($model,'code',array('class'=>'span5','maxlength'=>64)); ?>
<?php echo $form->textFieldRow($model,'img_name',array('class'=>'span5','maxlength'=>64)); ?>
<?php
echo $form->labelEx($model, 'image');
echo $form->fileField($model, 'image');
echo $form->error($model, 'image');
?>
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType'=>'submit',
'type'=>'primary',
'label'=>$model->isNewRecord ? 'Create' : 'Save',
)); ?>
</div>
<?php $this->endWidget(); ?>
我尝试将属性更改为安全但我收到此错误。
include(image.php): failed to open stream: No such file or directory
有人帮我解决这个问题。
答案 0 :(得分:0)
您是否将图像设置为模型中的文件?
public function rules()
{
return array(
array('image', 'file', 'types'=>'jpg, gif, png', 'safe'=>true),
);
}
控制器中的将您的行更改为
$model->image->saveAs(Yii::app()->baseUrl.'/images/vegetables/'.$model->image);
答案 1 :(得分:0)
$model->image->saveAs(Yii::getPathOfAlias('webroot').'/images/vegetables/'.$model->image);
因为我们上传时应该指定文件的完整路径(/ var / www)。当我们在已经存在的视图中渲染图像时,我们使用“baseUrl”。