AppController类在子目录Cakephp 3上不工作

AppController类在子目录Cakephp 3上不工作,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我正在使用cakephp jwt auth创建一个restapi,但是我在子文件夹中创建的AppController没有被调用 Ca/Api代码中的我的应用程序控制器代码 <?php namespace App\Controller\Ca\Api; use Cake\Controller\Controller; use Cake\Event\Event; class AppController extends Controller { public function ini

我正在使用
cakephp jwt auth
创建一个restapi,但是我在子文件夹中创建的AppController没有被调用

Ca/Api代码中的我的应用程序控制器代码

<?php
namespace App\Controller\Ca\Api;

use Cake\Controller\Controller;
use Cake\Event\Event;

class AppController extends Controller
{

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

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Auth', [
            'storage' => 'Memory',
            'authenticate' => [
                'Form' => [
                    'fields' => ['username' => 'email'],
                ],
                'ADmad/JwtAuth.Jwt' => [
                    'parameter' => 'token',
                    'userModel' => 'Users',
                    'fields' => [
                        'username' => 'id'
                    ],
                    'queryDatasource' => true
                ]
            ],
            'unauthorizedRedirect' => false,
            'checkAuthIn' => 'Controller.initialize'
        ]);

        $this->loadComponent('BryanCrowe/ApiPagination.ApiPagination', [
            'key' => 'paging',
            'aliases' => [
                'page' => 'currentPage',
                'current' => 'resultCount'
            ],
            'visible' => [
                'currentPage',
                'resultCount',
                'prevPage',
                'nextPage',
                'pageCount',
                'page',
            ]
        ]);

    }

    public function beforeFilter(Event $event) {
        parent::beforeFilter($event); 
    }
}

我的应用程序控制器类没有被调用,我不知道我哪里做错了。

您可以这样创建控制器

 <?php
namespace App\Controller\Api;

use Cake\Controller\Controller;
use Cake\Event\Event;

class AppController extends Controller
{

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

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Auth', [
            'storage' => 'Memory',
            'authenticate' => [
                'Form' => [
                    'scope' => ['Users.group_id' => 1]
                ],
                'ADmad/JwtAuth.Jwt' => [
                    'parameter' => 'token',
                    'userModel' => 'Users',
                    'fields' => [
                        'username' => 'id'
                    ],
                    'queryDatasource' => true
                ]
            ],
            'unauthorizedRedirect' => false,
            'checkAuthIn' => 'Controller.initialize'
        ]);
    }
}
<?php
namespace App\Controller\Ca;

use Cake\Event\Event;
use Cake\Http\Exception\UnauthorizedException;
use Cake\Utility\Security;
use Firebase\JWT\JWT;
use Cake\Http\ServerRequest;
use Cake\I18n\Time;

use Aws\S3\S3Client;
use League\Flysystem\AwsS3v3\AwsS3Adapter;
use League\Flysystem\Filesystem;
use Cake\Http\Exception\NotFoundException;

class DashboardController extends AppController
{

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

    public function home()
    {
        pr("hiiih");
    }   
}

在CakePHP中,AppController并不是在内部某个地方被神奇地调用的。您定义的路由调用特定的控制器,该控制器只需扩展AppController即可

按照惯例,您通常只会在
/src/Controller/AppController
中为整个应用程序使用单个AppController。它看起来基于示例中列出的身份验证方法,这是您采用的方法,但您不需要将其移动到子文件夹中以使前缀路由工作

根据您的路线:

Router::prefix('ca/api', function ($routes) {
。。。这将查找与
/src/Controller/Ca/Api
内的连接匹配的类,以及以下匹配:

// Note, the "prefix" item you listed on this line is not required I'd remove it:
$routes->connect('/login', ['controller' => 'Login', 'action' => 'login', "prefix" => "ca/api"]); 
。。这将在
/src/Controller/Ca/Api/
中查找名为
LoginController
的类。此类应仅引用其默认位置中现有的默认AppController:

<?php

namespace App\Controller\Ca\Api;

use App\Controller\AppController; // The namespace declaration is how your subclass locates it's parent class

class LoginController extends AppController
{

<?php

namespace App\Controller\Ca\Api;

use App\Controller\AppController; // The namespace declaration is how your subclass locates it's parent class

class LoginController extends AppController
{