0

我在这里发生了一件非常奇怪的事情。我检查了 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 的输出包含对象数据并且是绝对正确的。我没有看到问题:/

你能帮助我吗?

谢谢。

4

1 回答 1

0

好吧,我得到了错误...

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

数据库错误

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

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

于 2012-06-21T10:16:56.760 回答