我是Cakephp(3.5)中的新手,我目前正在尝试制作包含多个子目录的第一个插件(称为Example
)。其中一个是UserManager
目录,其中包含带有身份验证的用户MVC标准套件。
由于我想添加社交登录和其他内容,我创建了自己的auth组件,如docs中所述:
plugins/Example/UserManager/src/Controller/AppController.php
<?php
namespace Example\UserManager\Controller;
use App\Controller\AppController as BaseController;
class AppController extends BaseController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'authenticate' => [
'Example/UserManager.Example' => [
'fields' => ['username' => 'email', 'password' => 'pass'],
'userModel' => 'Users',
],
],
]);
}
}
plugins/Example/UserManager/src/Auth/ExampleAuthenticate.php
<?php
namespace App\Auth;
use Cake\Auth\BaseAuthenticate;
use Cake\Http\ServerRequest;
use Cake\Http\Response;
class ExampleAuthenticate extends BaseAuthenticate
{
// The same as Form authentication, since I'm testing
}
问题是我无法使身份验证组件找到ExampleAuthenticate
类。我已经尝试过将authenticate
配置参数设置为
Example
ExampleAuthenticate
UserManager.Example
Example/UserManager.Example
Example\UserManager.Example
Example/UserManager.ExampleAuthenticate
Example\UserManager.ExampleAuthenticate
但访问Authentication adapter "..." was not found.
时我总是收到错误http://localhost/Project/example/user-manager/users
:(
有没有人知道我可能缺少什么?
答案 0 :(得分:1)
问题是php
函数class_exists(...)
无法识别自定义身份验证类,因此在进一步挖掘之后,我意识到文档中显示的命名空间仅适用于自定义身份验证文件在App环境中定义,但不在插件中定义(愚蠢的我)。
所以我在namespace App\Auth;
内将namespace Example\UserManager\Auth;
更改为ExampleAuthenticate.php
,它就像一个魅力!现在函数class_exists('Example\\UserManager\\Auth\\ExampleAuthenticate')
返回true
,通过在Example/UserManager.Example
配置参数中定义authenticate
,一切都很完美。