【问题标题】:CakePHP: Plugin can't extend AppController inside main srcCakePHP:插件无法在主 src 中扩展 AppController
【发布时间】:2015-07-24 03:26:23
【问题描述】:

我正在使用 CakePHP 3。我一直在寻找使我的应用程序模块化的方法,有人建议我使用插件来做到这一点。所以我决定试一试。请看我之前的问题:Modular Directory Structure With CakePHP。我有一个名为 Client 的插件(模块) - 它有一个名为 ClientsController 的控制器。

当我使用“http://localhost/client/clients/index”访问它时,它不起作用。我收到一个缺少控制器的错误。我发现这是因为扩展了位于主目录中的 App\Controller\AppController。我在主 src 目录中的插件中拥有所有常见的东西。

怎么了?

为什么我不能扩展App\Controller\AppController?

错误

我的代码

<?php

use App\Lib\OC\OCSSP;
use Cake\Network\Exception;
use Cake\ORM\TableRegistry;
use Cake\Routing\Router;
use Cake\Utility\Text;


use App\Controller\AppController;

/**
 * Clients Controller
 *
 * @property \App\Model\Table\ClientsTable $Clients
 */
class ClientsController extends AppController
{

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

    }

}

【问题讨论】:

  • 为什么错误代码中有命名空间,但上面发布的内容中没有?也许你忘了那一点:) namespace Client\Controller;
  • 由于没有找到控制器(误报)。 CakePHP 向我建议错误中的代码是我用来创建控制器的代码。
  • 是的,但是你忽略了使用命名空间,这意味着 Cake 正在寻找 \Client\Controller\ClientsController 而你给了它 jjust \ClientsController php.net/manual/en/language.namespaces.rationale.php
  • I found out it was because of extending App\Controller\AppController - 这是一个错误的结论。我建议您 bake 插件并与您现有的代码进行比较,只是移动文件是行不通的,就好像文件在正确的位置使用错误的命名空间一样,就像该类不存在一样。
  • 因为我删除了插件的AppController。我把它放回去,一切正常。它已经将 App\Controller 扩展为 BaseController。所以是的,我以这种方式得出结论有点错误。

标签: php cakephp namespaces


【解决方案1】:

我不知道 cake,但从外观上看,您只是忘记了错误消息建议使用的命名空间。

namespace \Client\Controller

这会导致作用域解析错误,你看这就像给类命名

你有一个名为

的类
 \ClientsController 

蛋糕正在寻找一个叫这个的

\Client\Controller\ClientsController 

另外请注意,您希望命名空间位于文件中开头 php 标记之后的第一行 code。

<?php
 namespace ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多