如何使用yii中的模型上传文件?

时间:2014-07-05 16:56:40

标签: php yii image-uploading

我读过这篇文章http://yiiframework.com/wiki/2 我一步一步地完成了一切。 但它不起作用! 这是我只是复制然后粘贴的模型:

class Item extends CActiveRecord
{
    public $image;
    // ... other attributes

    public function rules()
    {
        return array(
            array('image', 'file', 'types'=>'jpg, gif, png'),
        );
    }
}

我的观点与文章完全相同:

$form = $this->beginWidget(
    'CActiveForm',
    array(
        'id' => 'upload-form',
        'enableAjaxValidation' => false,
        'htmlOptions' => array('enctype' => 'multipart/form-data'),
    )
);

// ...
echo $form->labelEx($model, 'image');
echo $form->fileField($model, 'image');
echo $form->error($model, 'image');
// ...
echo CHtml::submitButton('Submit');
$this->endWidget();

我的控制器是:

class ItemController extends CController
{
    public function actionCreate()
    {

        $model=new Item;
        if(isset($_POST['Item']))
        {
            $model->attributes=$_POST['Item'];
            $model->image=CUploadedFile::getInstance($model,'image');
            if($model->save())
            {
                $model->image->saveAs(dirname(__FILE__).'/a.txt');
                // redirect to success page

            }
        }
        $this->render('create', array('model'=>$model));
    }
}

当我选择图像(jpg,png或其他)时,控制器没有看到我的文件,我的意思是isset($_FILES['Item'])是假的...我知道它是假的,因为我用var_dump数百次检查:

  public function actionCreate()
    {

        $model=new Item;
        var_dump(isset($_POST['Item']));
...

我也测试var_dump(isset($_FILES['Item']))也是假的。 对于每种文件(普通txt文件除外)$_POST['Item'])仍为空。

我使用firebug网络面板(Firefox和Chrome)检查了我的请求,并且请求包含了该文件。 我已经检查了这个问题,似乎问题相同,但答案并不有用,因为CUploadedFile::getInstanceCUploadedFile::getInstanceByName对我的案例也返回null

你觉得怎么样?

2 个答案:

答案 0 :(得分:0)

在控制器更改和使用中如下:

class ItemController extends CController
{
    public function actionCreate()
    {

        $model=new Item;
        if(isset($_POST['Item']))
        {
            $model->attributes=$_POST['Item'];
            $uploadedFile = CUploadedFile::getInstance($model,'image');
            if($model->save())
            {

                if(!empty($uploadedFile))  // check if uploaded file is set or not
                {

                    if($model->image == null || empty($model->image)){
                        $rnd = rand(0,9999);// generate random number between 0-9999
                        $fileName = "{$rnd}-{$uploadedFile}";
                        $model->image = $fileName;
                    }
                    $uploadedFile->saveAs(dirname(__FILE__)..'/images/'. $model->image);
                    // redirect to success page
                }
            }
        }
        $this->render('create', array('model'=>$model));
    }
}

答案 1 :(得分:0)

问题与Yii Framework或我的PHP代码无关,因为我只是在两台不同的机器上测试相同的代码,并且工作得很好。 我在我自己的计算机上使用wamp,我猜这个问题与Apache或php配置有关。