如何在ZF2中重用模块的控制器?

时间:2013-01-22 08:01:23

标签: class frameworks module controller zend-framework2

您好我正在尝试实例化我正在使用的另一个模块(由我创建)的另一个类控制器的类控制器,但我不能这样做,因为我收到了消息:

  

未找到类'ZfCommons \ Controller \ MyAbstractActionController'   .....

当我执行命令use ZfCommons\Controller\MyAbstractActionController;

第一个命令中包含类MyAbstractActionController的文件是:

namespace ZfCommons\Controller;

我想我必须在PHP中执行require或include,但是使用ZF2我认为可能有更优雅的方法来做到这一点。

我该怎么办?也许我错了。 如果您需要查看更多代码,我可以复制和粘贴。

1 个答案:

答案 0 :(得分:1)

如果您只想获得某些服务(例如某些AuthService),您可以将其注册为服务(您可能在控制器上调用getAuthService()后已经完成)并使用ServiceLocator获取它或 - 甚至更好的单元测试 - 通过工厂将其注入您的控制器。您可能需要查看ZfcUser,看看它是如何完成的。

如果您 - 由于某种原因 - 坚持使用这种硬编码方法(这实际上是对框架有效)我认为您只是错误地设置了自动加载或ZfCommons模块未激活。

<强>第一

检查application.config.php以获取已激活的模块。 ZfCommons和Application至少需要激活。

<强>第二

检查ZfCommons的Module.php以初始化自动加载器:

<?php
namespace ZfCommons;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\Loader\StandardAutoloader;

class Module implements AutoloaderProviderInterface,
{
    // snip

    /**
     * {@inheritDoc}
     */
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    // snip
}

这将初始化名称空间ZfCommons的类自动加载。

如果您的文件名根据PSR-0正确映射到类和接口,它现在应该可以正常工作。