'错误:在非对象上调用成员函数allow()'在CakePHP 3 AuthComponent中

时间:2016-01-05 12:53:25

标签: cakephp authorization cakephp-3.0 method-overriding

在CakePHP之后看起来有点令人困惑而且不那么直接,我已经创建了一个基本的身份验证逻辑,但是,我似乎无法加载Auth组件。

以下是AppController.php的代码部分:

public function initialize()
{
    parent::initialize();

    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
            'authenticate' => ['Form' => ['fields' => ['username' => 'email', 'password' => 'password']]],
            'loginAction' => ['controller' => 'Users', 'action' => 'login'],
            'loginRedirect' => ['controller' => 'Groups', 'action' => 'index'],
            'logoutRedirect' => ['controller' => 'Users', 'action' => 'login']
    ]);  
}


//Allow basic views

public function beforeFilter(Event $event)
{
    $this->Auth->allow(['index', 'view', 'display']);
}

现在无论我运行哪个控制器或操作,我总会收到以下错误:

Error: Call to a member function allow() on a non-object 

引用以下行:

$this->Auth->allow(['index', 'view', 'display']);

它必须是一个直截了当的东西,但我在文档中找不到它,因此非常感谢任何帮助或指导。

2 个答案:

答案 0 :(得分:3)

检查您的子控制器方法initialize()是否正在调用父方法。

class MyController extends AppController
{
    public function initialize() {
        parent::initialize();
        //rest of code
    }
}

答案 1 :(得分:0)

当我没有创建Template/Users/login.ctp模板时,我已经得到了这个

只有在检查了

获得的堆栈跟踪后才能找到
$e = new \Exception('How did I got here anyway?');
debug($e->getTraceAsString());

产生

#5 vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(318): Cake\Controller\Controller->render('missingTemplate')