移动到src \ MyApp \ Model \ Repository时找不到ZF2模型类

时间:2014-01-16 17:42:58

标签: zend-framework2

我正在尝试将数据库表类移动到\ Model \ Repository的推荐位置而不是\ Model,以便更好地分割模型代码。但是当我这样做时,它找不到类。我对ZF2很新,所以它可能很简单。我假设可以将模型类放入分段目录中,以便更好地分类模型类文件。

这有效:

模块\客户端\ SRC \客户\模型\ ClientTable.php

Module.php中ClientTable.php的路径:

    public function getServiceConfig() {
    return array(
        //  setup multiple table access by model as {tablename}Table
        'factories' => array(
            'Client\Model\ClientTable' => function($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $table = new Model\ClientTable($dbAdapter);
                return $table;
            },
        ),
    );
}

但是试图从Repository调用会破坏它并导致找不到类方法,但如果它在Module目录中,应该找到它,对吗?

模块\客户端\ SRC \客户\模型\库\ ClientTable.php

Module.php中ClientTable.php的路径:

    public function getServiceConfig() {
    return array(
        //  setup multiple table access by model as {tablename}Table
        'factories' => array(
            'Client\Model\Repository\ClientTable' => function($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $table = new Model\Repository\ClientTable($dbAdapter);
                return $table;
            },
        ),
    );
}

1 个答案:

答案 0 :(得分:2)

您遇到类自动加载路径的问题。您应该转到模块配置(module.config.php和module.php)更新命名空间映射以指向文件的新位置。

例如,你将在module.php中有这样的函数

public function getAutoloaderConfig() {
    return array (
            'Zend\Loader\ClassMapAutoloader' => array (),
             'Zend\Loader\StandardAutoloader' => array (
                    'namespaces' => array (
                            __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                                "DBAL\\Entity" => __DIR__ . '/src/DBAL/Entity',
                            "DBAL\\Entity\\User" => __DIR__ . '/src/DBAL/Entity/User' 
                    ) 
            ) 
    )
    ;
}

这是我的一个项目的代码。如果您发布了module.config.phpmodule.php,我可以为您提供更具体的帮助

可能你有一些指向src\MyApp\Model的映射,你必须将它们更改为src\MyApp\Model\Repository

另外,请确保在移动的文件中有正确的Client\Model\Repository命名空间