【问题标题】:Shared base controller between modules模块之间共享基本控制器
【发布时间】:2014-11-12 10:00:59
【问题描述】:

我正在设置一个多模块应用程序,到目前为止,我已经像这个例子一样设置它http://docs.phalconphp.com/en/latest/reference/applications.html

但我在徘徊,是否有可能共享后端和前端控制器都从其扩展的基本控制器。这样我就可以在基本控制器中拥有一个 ACL。我该如何设置?

根据文档,我可以在任何地方创建一个控制器库,然后直接在引导文件中需要这个文件,或者使用任何自动加载器加载。所以我创建了一个名为 apps/shared/controllers/ControllerBase.php 的文件夹,并直接在引导文件中需要这个文件,但这不起作用。

如果我尝试像这样加载控制器:

 class AdminController extends ControllerBase
 {

       public function indexAction()
       {
            echo "<h1>Hello admin!</h1>";
        }
  }

我收到一个错误......Backend\Controllers\ControllerBase' not found in......

那么如何根据文档使用任何自动加载器进行加载?我是否需要将其注册为自己的命名空间或其他东西?

【问题讨论】:

  • AdminController 在哪里,AdminController 的命名空间是什么?
  • 当您说您在引导程序中包含文件时,您是直接包含该文件,还是您在配置部分中为自动加载提供目录位置?
  • 使用 require 直接将文件包含在引导程序中。如果有帮助,我会在回家后发布文件结构。
  • 我现在也遇到了同样的问题。这是由于每个模块中 Module.php 上的方法 registerAutoloaders 所致。在它上面我们定义了一个新的自动加载器,它重载了之前的并且使你所有其他注册的命名空间无效。不知道如何避免它。如果我发现了什么,我会尽力回答。
  • 谢谢,让我知道你过得怎么样。

标签: phalcon phalcon-routing


【解决方案1】:

您没有使用基本控制器的完整命名空间路径,因此自动加载器会尝试在子类的同一命名空间下找到它。

试试这样的:

namespace MyApp\Backend\Controllers;

use MyApp\Shared\Controllers\ControllerBase;

class AdminController extends ControllerBase
{
    public function indexAction()
    {
        echo "<h1>Hello admin!</h1>";
    }
}

此答案认为您已正确应用PSR-0 and PSR-4

【讨论】:

  • 不,还没有找到。我的控制器基础是 Core\Controllers\ControllerBase 我的另一个模块的控制器是 Modules\Contact\Controllers\IndexController 它已经扩展了 \Core\Controllers\ControllerBase 但仍然找不到错误。
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多