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

I'm using yii framework but I think this is related to PHP

In my controller, I have the following code

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

the function checkFileUpload is a custom function which contains

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;
...

I got the error get property of non-object in $uploadedFile->error.

I've tried to use reference to the model instead, but it is deprecated and does not work for me.

If I use the code of the called function (checkFileUpload) within the controller code, it works fine. I suspect that object is not passed in a correct way.

Any help?

This is because your call to CUploadedFile::getInstance returns null and not the instance you desired.

Null is returned if no file is uploaded for the specified model attribute.

Yii Documentation

It seems like your file was not correctly uploaded. I am not a Yii Framework user, but the documentation states:

The file should be uploaded using CHtml::activeFileField.

Yii Documentation

So you should verify that the file was actually correctly uploaded with the proper method from the Yii Framework.

PS: Objects are always passed by reference.

$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;

The problem occurred because at the time when you are using $uploadedFile->error,the value of $uploadedFile is null.

The following line is not giving you the desired value

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

Which means no file has been uploaded.

Try CVarDumper::dump($_FILES,10,true);

This will tell you whether the problem is with the UPLOADING OF THE FILE or GETTING THE DETAILS OF THE UPLOADED FILE

you cant access the private property $_error $uploadedFile->_error if you are trying to. you must call $uploadedFile->getError() in your code. Also $uploadedFile will return null if no file uploaded so you must take care of that as well.

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

will work for you.