【问题标题】:Nested controller directories with common Base Controller in PhalconPhalcon 中具有通用基本控制器的嵌套控制器目录
【发布时间】: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 个问题:

  1. 我需要为 /controllers 中的每个子目录注册一个单独的命名空间。这是否会导致任何性能问题,例如 10 多个命名空间?
  2. 我不能为所有命名空间控制器拥有 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


【解决方案1】:

因为它似乎有效:

我有多个命名空间(多个路径)和许多控制器(有或没有命名空间),它们继承自一个 ControllerBase(没有命名空间)。所以这是可行的。

就 PHP 能够加载您的类而言,您应该只能拥有一个 ControllerBase

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2018-03-24
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多