用于Propel 1.5.6的Autoloader似乎不能完全正常工作

时间:2011-02-13 16:20:16

标签: propel autoload peer

我在我的Mac上安装了Propel 1.5.6,通过MacPorts运行PHP 5.12.14。我已经创建了一个模式,生成了一个模型,运行了sql生成和插入任务,现在我正在转向运行时的东西。

我有以下代码可以正常工作(它创建一行然后计算行数):

<?php

// Set up some paths & schema info
$projectPath = realpath( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . '..' );
$schemaName = 'database';
$modelPath = $projectPath . "/${schemaName}/build/classes";

// Init propel
require_once $projectPath . '/lib/propel-1.5/runtime/lib/Propel.php';
Propel::init($projectPath . "/${schemaName}/build/conf/${schemaName}-conf.php");

// Add the generated 'classes' directory to the include path
set_include_path($modelPath . PATH_SEPARATOR . get_include_path());

// This seems to be sufficient to get the autoloader working ***
require_once $modelPath . '/database/NodePeer.php';

$node = new Node();
$node->setName('My Node');
$node->setHash(sha1($node->getName()));
$node->save();

$nodes = NodePeer::doSelect(new Criteria());
echo 'Node count: ' . count($nodes) . "\n";
?>

但是,如果我删除带有星号注释的行,我希望它仍然有效 - 我认为自动加载器应该启动并为我加载所有所需的模型类。但是,我明白了:

  

致命错误:未定义的类常量   'NAME'in   (项目)/database/build/classes/database/om/BaseNode.php   在211行

我已经攻击了自动加载器以回显它加载的类,并发现它确实加载了一些类:

  

自动加载:节点

     

自动加载:BaseNode

但是,当它加载BaseNode时,它会在对Peer类的静态引用上挣扎。我发现如果手动需要BaseNode就是这种情况。

  • PHP是否在我的配置上挣扎以自动加载静态调用的方法/常量?
  • 或者Propel自动加载器加载的顺序可能有问题吗?

提前致谢。暂时,我会像往常一样继续 - 包括同伴在内并不是一个大问题 - 但我想知道如果没有它我是否可以逃脱。少想一想!

1 个答案:

答案 0 :(得分:2)

自动加载器在这种情况下不起作用,因为我的模型生成了一个与Propel核心提供的接口发生冲突的类。重命名这个就行了,就像使用命名空间系统一样(当然后者依赖于使用PHP 5.3。+)。