尽管对象存在,但在非对象上调用成员函数

时间:2012-06-20 10:49:20

标签: php cakephp

我在这里发生了一件非常奇怪的事情。我检查了AppController的beforeFilter()函数,是否存在id。它在我打开url / project / user / 1时有效,但是当我打开/ project / user / edit / 1时它表示我在非对象上使用了一个函数。我已经检查过我是否真的这样做了,但我不知道。我用pr()输出值,它显示了对象内容。

这是我的beforeFilter()函数:

$request = $this->request;

if (isset($request->params['id'])) {
            $model = Inflector::singularize(ucfirst($request->params['controller']));
            $cond = array('conditions' => array($model . '.id' => $request->params['id']));
            pr($this->{$model});
            exit;
            if (!$this->{$model}->find('first', $cond)) {
                $this->Session->setFlash(__('Invalid id.'), 'flash_notice');
                $this->redirect(array(
                    'manager' => (bool)$request->params['manager'],
                    'controller' => 'tournaments',
                    'action' => 'index'
                ));
            }
        }

在执行id条件之前,$ model的输出包含对象数据,并且绝对正确。我没有看到问题:/

你能帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:0)

好的,我收到了错误......

当您打开的URL出现其他错误(例如数据库连接错误)时,代码就不起作用了。我很难解释,但是当我删除上面的代码并打开我的URL时出现了这样的错误:

  

数据库错误

     

错误:SQLSTATE [42000]:语法错误或访问冲突:1064您   您的SQL语法有错误;检查对应的手册   您的MySQL服务器版本,以便在“isAdmin”附近使用正确的语法   在第1行

当我修复该错误时,上面的代码工作正常。