Ошибка: нестатический метод DboSource::expression() не должен вызываться статически в CakePHP 2.x

Привет всем, я разработал приложение на платформе cakephp 2.x. Я написал код для обновления и сохранения в базе данных, используя следующий код:

public function editpackage($id=null)
{
    $this->layout='dashboard';
    $this->loadModel('Survay');
    if (!$id) {
        throw new NotFoundException(__('Your request is invalid'));
    }

    $get_survay_id = $this->Survay->findById($id);
    if (!$get_survay_id) {
        throw new NotFoundException(__('Your request is invalid'));
    }  

    if ($this->request->is(array('post', 'put'))) {
        $this->Survay->id = $id;
        $this->request->data['Survay']['modifydate']=DboSource::expression('NOW()');
        if ($this->Survay->save($this->request->data)) {
            $this->Session->setFlash('Your Survay is successfully  updated','default',array('class'=>'alert alert-success'));   
            return $this->redirect(array('controller'=>'Users','action'=>'detailspackage'));
        }
    }
    if (!$this->request->data) {
        $this->request->data = $get_survay_id;
    }
}

Я осознаю :

Non-static method DboSource::expression() should not be called statically, assuming $this from incompatible context

person Sahadev    schedule 02.12.2015    source источник
comment
Взгляните на это   -  person skywalker    schedule 02.12.2015
comment
Но зачем мне это делать, если я добавил App::uses('DboSource', 'Model/DataSource'); вверху мой файл контроллера. Это также называется статическим   -  person Sahadev    schedule 02.12.2015
comment
спасибо приятель, я решил свою проблему.   -  person Sahadev    schedule 02.12.2015


Ответы (1)


Это связано с тем, что вы используете PHP версии 5.4 или выше, в которой E_STRICT стал частью E_ALL.

Опция 1

Вы можете удалить ~E_STRICT из отчетов об ошибках, изменив конфигурацию ошибок в app/Config/core.php:

Configure::write('Error', array(
    'handler' => 'ErrorHandler::handleError',
    'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
    'trace' => true
));

Вариант 2

Вместо

DboSource::expression('NOW()');

Вы можете позвонить

$this->Model->getDataSource()->expression('NOW()');
person Inigo Flores    schedule 02.12.2015