Yii上传图片

时间:2014-02-26 11:41:27

标签: php yii

在我的网络应用程序中,我需要在创建记录时上传图像。但我收到错误,虽然我按照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

有人帮我解决这个问题。

2 个答案:

答案 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)

@Burhan Cetin。我终于弄明白了。当我们上传时,我们应该使用

$model->image->saveAs(Yii::getPathOfAlias('webroot').'/images/vegetables/'.$model->image);

因为我们上传时应该指定文件的完整路径(/ var / www)。当我们在已经存在的视图中渲染图像时,我们使用“baseUrl”。