我遇到了一個問題,有一天在PagesController
被扔以下錯誤:
Fatal error: Call to a member function find() on a non-object in /home/jmccreary/www/thoroughbredsource.com/cakephp/app/app_controller.php on line 20
app_controller.php線20:
$this->current_user = $this->User->find('first', array('recursive' => 0,
'conditions' => array('User.id' => $this->logged_in_user_id)));
在這種情況下,$this
是PagesController
的一個實例,但是由於某種原因沒有從app_controller.php繼承User
模型。
爲了完整起見,這裏的相關代碼:
pages_controller.php
var $name = 'Pages';
var $uses = null;
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('*');
}
app_controller.php
var $uses = array('User');
var $components = array('Session', 'Cookie', 'RequestHandler', 'DebugKit.Toolbar', 'Auth' => array('autoRedirect' => false, 'loginRedirect' => array('controller' => 'users', 'action' => 'dashboard'), 'flashElement' => 'error', 'loginError' => 'The username or password you provided are incorrect.', 'authError' => 'Please log in first.', 'fields' => array('username' => 'email', 'password' => 'passwd'), 'userScope' => array('User.active' => 1)));
var $helpers = array('Html', 'Form', 'Session');
function beforeFilter() {
parent::beforeFilter();
// configure Cookie Component
// ...
$this->logged_in_user_id = $this->Auth->user('id');
if ($this->logged_in_user_id) {
// NOTE: the following runs on each request for the logged in user
$this->current_user = $this->User->find('first', array('recursive' => 0, 'conditions' => array('User.id' => $this->logged_in_user_id)));
}
}
我過去的這個錯誤被改變var $uses = null;
到var $uses = array();
。請注意,刪除此行完全導致了相同的錯誤。
最後,我不完全瞭解原來的問題或我的解決方案。我希望有更好的解釋或適當的解決方案。順便說一句,運行CakePHP 1.3.10。
+1 IMO,這是一個幾乎令人不安的篡改OOP如何正常工作。 – webbiedave
奇怪的是第427行:'elseif($ this-> uses!== null || $ this-> uses!== false){$ merge [] ='uses'; }'這裏使用'||' - 而不是'&&' - 總是會導致'true' – webbiedave
@webbiedave - 你看不懂它的正確性。它說:如果它是空的或者它是假的。換句話說,它在這種情況下將null看作是假的。就像我說的,如果它是假的,它不會與AppController合併。因此,如果null等於false,則表示它不會合並。 –