Phalcon:使用模块和通用控制器继承控制器

时间:2014-04-14 17:29:03

标签: php inheritance controllers phalcon

我希望有人能够帮助我,因为我一直有点疯狂试图让它发挥作用。我已经在网上进行了大量搜索并找到了一些信息,但不幸的是,我似乎无法找到解决方案。

我正在尝试使用多个模块在Phalcon中实现以下功能。

MasterController扩展了控制器
BackendController扩展了MasterController
ModuleController扩展了BackendController
ClientsController扩展了ModuleController

我拥有的文件夹结构是:

应用
        | - > CRM
                | - >控制器
                        | ---> ModuleController
                        | ---> ClientsController
常见
        | - >控制器
                | - > MasterController
                | - > BackendController

现在在CRM下的Modules.php文件中,我有以下内容:

    $loader->registerNamespaces(
        array(
            'Multiple\Crm\Controllers'      => __DIR__ . '/controllers/',
            'Multiple\Crm\Models'           => __DIR__ . '/models/',
            'Multiple\Crm\Plugins'          => __DIR__ . '/plugins/',
            'Multiple\Common\Controllers'   => __DIR__ . '/../../common/controllers/'
        )
    );

我的ModuleController文件如下所示:     

class ModuleController extends Multiple\Common\Controllers\BackendBase
{
    public function onConstruct()
    {
        echo "hello";
    }
}

每当我运行代码时,我都会遇到以下致命错误:

致命错误:第8行的/var/www/phalcon/html/apps/crm/controllers/ModuleController.php中找不到类'Mulitple \ Common \ Controllers \ BackendBase'

我尝试了很多东西,但我似乎无法让它发挥作用。谁能对此有所了解并告诉我我做错了什么?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

在审核了@cvsguimaraes和@NikolaosDimoploulos的评论之后,我选择了#34;再次开始#34;。我使用phalcon devtools使用apps选项生成结构的基础。

基于此,我随后能够构建"从那里开始的结构。

为了获得继承权,我在此之后就是我的最终目标:

#File: apps/crm/controllers/ClientsController.php
namespace myApp\CRM\Controllers

class ClientsController extends ControllerBase {...}

#File: apps/crm/controllers/ControllerBase.php
namespace myApp\CRM\Controllers

class ControllerBase extends \myApp\common\Controllers\FrontendBase {...}

#File: common/controllers/FrontendBase.php
namespace myApp\common\Controllers

class FrontendBase extends \myApp\common\Controllers\MasterBase {...}

#File: common/controllers/MasterBase.php
namespace myApp\common\Controllers

class MasterBase extends \Phalcon\Mvc\Controller {...}

然后在文件中:apps / crm / Module.php我有以下内容:

namespace myApp\CRM;

class Module implements ModuleDefinitionInterface
{

    public function registerAutoloaders()
    {
        $loader = new Loader();
        $loader->registerNamespaces(array(
            'myApp\CRM\Controllers' => __DIR__ . '/controllers',
            'myApp\CRM\Models' => __DIR__ . '/models',
            'myApp\common\Controllers' => __DIR__ . '/../../common/Controllers',
            'myApp\common\Models' => __DIR__ . '/../../common/Models'
        ));
        $loader->register();
    }
}

然后按预期工作。您可以在MasterBase中拥有可以从更高级别调用的函数,还可以运行诸如将css和JS添加到不同级别的输出之类的函数,允许您根据需要分离控件。