Yii自动加载命名空间

时间:2013-12-09 23:31:06

标签: php yii namespaces

所有

提出了类似的问题,但我似乎无法弄清楚这一点。我有一个运行的ConsoleCommand,我想要命名文件。结构如下:

/protected/commands/Ingestion/(root,包含IngestionCommand.php)。 /protected/commands/Ingestion/ingestionServices/(包含此命令所依赖的服务)。

奇怪的是,当我没有在我的IngestionCommand顶部放置'namespace Ingestion'但是将所有其他名称空间单独留下时,一切运行正常。我只是想将这个类放入命名空间Ingestion中,但是php会抛出这个错误:

PHP Fatal error:  Cannot redeclare class Ingestion\IngestionCommand in /mnt/hgfs/linkFolder/devro/CFXJobTrack/monoMassPrintTemplate/protected/commands/Ingestion/IngestionCommand.php on line 166
PHP Error[2]: include(/mnt/hgfs/linkFolder/devro/CFXJobTrack/monoMassPrintTemplate/protected/config/../commands/Ingestion/Iterator.php): failed to open stream: No such file or directory...

我也不知道Iterator.php失败的文件是什么... 我已经使用NetBeans和Finder(在mac上)来搜索这个类的其他实例,但我没有。这是我的.conf的一部分:

    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR . '..',
    'name'=>'Cron',
    'preload'=>array('log'),
    'aliases'=> array(
        'Ingestion' => dirname(__FILE__) . '/../commands/Ingestion/',
    ),
//autoload class for use in yii.
     'import'=>array(
            'application.components.*',
            'application.models.*',
            'application.extensions.sftp.*',
            'application.components.container.*',
            'application.commands.*',
            'Ingestion.*',
            'Ingestion.ingestionServices.*',

    ),
    'commandMap'=> array(   
        'ingestion' =>array(
            'class' =>'Ingestion.IngestionCommand',
        ),

当我注释掉这一行:

'Ingestion' => dirname(__FILE__) . '/../commands/Ingestion/',

php抱怨这样:

PHP Error[2]: include(IngestionCommand.php): failed to open stream: No such file or directory
    in file /mnt/hgfs/linkFolder/devro/CFXJobTrack/yii/framework/YiiBase.php at line 421...

这告诉我,我试图加载这个课程的唯一地点就在那里,但我可能错了。谁知道我错过了什么/做错了什么?

我无法理解为什么我不能命名这个类,但我可以命名子目录类。

如果我遗漏了一些重要信息,请告诉我。以防万一,这是我正在运行的init文件:

// change the following paths if necessary
$yii=dirname(__FILE__).'/../../../yii/framework/yii.php';
$config=dirname(__FILE__).'/../config/cron.php';


// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

require_once($yii);
require_once(dirname(__FILE__).'/../components/ConsoleApplication.php');
Yii::createApplication('ConsoleApplication',$config)->run();

所有文件都遵循与类相同的命名约定。

我已经完成了这个以及其他一些SO问题和Yii文件: Yii Framework Namespace Docs

感谢。

1 个答案:

答案 0 :(得分:1)

通过将摄取'class'参数更改为'\ Ingestion \ IngestionCommand'来解决此问题。 (在commandMap下)。