【发布时间】: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\ClientsControllerphp.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