从被调用函数访问时尝试获取非对象的属性

时间:2015-01-11 17:10:05

标签: php yii

我正在使用yii框架,但我认为这与PHP有关

在我的控制器中,我有以下代码

$model = new Events;
    $model->type_id = $type_id;
    $checkFileUpload = checkFileUpload($model);

函数checkFileUpload是一个包含

的自定义函数
function checkFileUpload($model)
    {
        $rnd = rand(0, 9999);
        $uploadedFile = CUploadedFile::getInstance($model, 'image');
        if($uploadedFile->error == 0)
        { 
            $fileName = "{$rnd}-{$uploadedFile}";  // random number  file name
            $model->image = $fileName;
...

我在$ uploadedFile->错误中获得了非对象的错误获取属性。

我尝试使用对模型的引用,但它已被弃用,对我不起作用。

如果我在控制器代码中使用被调用函数(checkFileUpload)的代码,它可以正常工作。我怀疑对象没有以正确的方式传递。

任何帮助?

4 个答案:

答案 0 :(得分:0)

这是因为您对CUploadedFile::getInstance的调用会返回null而不是您想要的实例。

  

如果没有为指定的模型属性上传文件,则返回Null。

     

- Yii Documentation

您的文件似乎未正确上传。我不是Yii Framework用户,但文档说明:

  

应使用CHtml::activeFileField上传文件。

     

- Yii Documentation

因此,您应该使用Yii Framework中的正确方法验证文件是否已实际正确上传。

PS:对象总是通过引用传递。

答案 1 :(得分:0)

$model = new Events;
$type_id=$model->type_id;
$checkFileUpload = checkFileUpload($model);

    function checkFileUpload($model)
        {
            $rnd = rand(0, 9999);
            $uploadedFile = CUploadedFile::getInstance($model, 'image');
            if(!isset($uploadedFile->getHasError()))
            { 
                $fileName = "{$rnd}-{$uploadedFile}";  // random number  file name
                $model->image = $fileName;

答案 2 :(得分:0)

问题出现是因为当您使用 $ uploadedFile->错误时, $ uploadedFile 的值为null

以下行未提供所需的值

$ uploadedFile = CUploadedFile :: getInstance($ model,' image');

这意味着没有上传文件。

尝试CVarDumper::dump($_FILES,10,true);

这将告诉您问题是与UPLOADING OF THE FILE还是GETTING THE DETAILS OF THE UPLOADED FILE

有关

答案 3 :(得分:0)

如果您尝试,则无法访问私有媒体资源$ _error $uploadedFile->_error。您必须在代码中调用$uploadedFile->getError()。如果没有上传文件,$ uploadedFile也会返回null,所以你也必须照顾它。

$rnd = rand(0, 9999);
        $uploadedFile = CUploadedFile::getInstance($model, 'image');
        if(!empty($uploadedFile) && !$uploadedFile->getHasError())
        {
            $fileName = "{$rnd}-{$uploadedFile}";  // random number  file name
            $model->image = $fileName;

会为你效劳。