我在我的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就是这种情况。
提前致谢。暂时,我会像往常一样继续 - 包括同伴在内并不是一个大问题 - 但我想知道如果没有它我是否可以逃脱。少想一想!
答案 0 :(得分:2)
自动加载器在这种情况下不起作用,因为我的模型生成了一个与Propel核心提供的接口发生冲突的类。重命名这个就行了,就像使用命名空间系统一样(当然后者依赖于使用PHP 5.3。+)。