【发布时间】:2013-12-17 15:21:34
【问题描述】:
我设置了一个 Phalcon 项目,并且我有多个 Controller 目录的工作实现。我当前的目录结构很简单,如下所示:
/controllers
/admin
ControllerBase.php
IndexController.php
AuthController.php
ControllerBase.php
IndexController.php
为了让它工作,我注册了两个命名空间:
$loader->registerNamespaces(
array(
'App\Controllers' => APP_PATH .'/controllers/',
'App\Controllers\Admin' => APP_PATH .'/controllers/admin/',
...
));
虽然这可行,但在创建具有多个目录的大型应用程序时会出现以下 2 个问题:
- 我需要为 /controllers 中的每个子目录注册一个单独的命名空间。这是否会导致任何性能问题,例如 10 多个命名空间?
- 我不能为所有命名空间控制器拥有 1 个通用 ControllerBase。无论子目录/命名空间如何,我的所有控制器都可以从一个主基础控制器继承吗?
我遇到的主要问题是 #2,似乎无论我尝试什么,我都无法让 /admin/IndexController.php 从 /ControllerBase.php 继承。它只允许我从 /admin/ControllerBase.php 继承。
【问题讨论】:
-
不应该出现 #2 问题。我有多个命名空间(多个路径)和许多控制器(有或没有命名空间),它们继承自一个 ControllerBase(没有命名空间)。所以这是可行的。就 PHP 能够加载您的类而言,您应该只能拥有一个 ControllerBase
-
感谢 jodator。如果您想将其作为答案提交,我可以接受。这里的解决方案是从
ControllerBase.php中删除命名空间并调用$loader->registerClasses( 'ControllerBase' => PATH ); -
当然,为什么不呢?我很高兴它对您有所帮助。
标签: php controllers phalcon