0

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

在.....中找不到类“ZfCommons\Controller\MyAbstractActionController”

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

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

namespace ZfCommons\Controller;

我想我必须在 PHP 中做一个要求或包含,但使用 ZF2 我认为也许有一种更优雅的方式来做到这一点。

我该怎么做?也许我使用了错误的东西。如果您需要查看更多代码,我可以复制和粘贴。

4

1 回答 1

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正确映射到类和接口,它现在应该可以工作了。

于 2013-01-22T08:18:42.083 回答