Я установил Propel 1.5.6 на мой Mac с PHP 5.12.14 через MacPorts.Я создал схему, сгенерировал модель, выполнил задачи генерации и вставки 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' в (проекте) /database/build/classes/database/om/BaseNode.php в строке 211
Я взломал автозагрузчик, чтобы отобразить загруженные им классы, и обнаружил, что он действительно загружает некоторые классы:
Автозагрузка: Узел
Автозагрузка: BaseNode
Однако, когда он загружает BaseNode, он сталкивается со статической ссылкой на класс Peer.Я считаю, что это тот случай, если BaseNode также требуется вручную.
- Не удается ли в моей конфигурации PHP выполнить автозагрузку статически вызываемых методов / констант?
- Или может быть проблемаделать с порядком, в котором автозагрузчик Propel загружает вещи?
В настоящее время я продолжу в том же духе - не проблема в том, чтобы включить одноранговый узел - но я бы хотелхотел бы знать, смогу ли я обойтись без этого.Еще одна вещь для размышления!