Я установил 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";
?>
Однако, если я удалю строку с отмеченным звездочкой комментарием, я ожидаю, что он все равно будет работать - я думаю, что автозагрузчик должен сработать и загрузить все необходимые для меня классы модели. Однако я получаю следующее:
Неустранимая ошибка: неопределенная константа класса «ИМЯ» в (проект)/база данных/сборка/классы/база данных/ом/BaseNode.php в строке 211
Я взломал автозагрузчик, чтобы отображать классы, которые он загружает, и обнаружил, что он действительно загружает некоторые классы:
Автозагрузка: узел
Автозагрузка: базовый узел
Однако, когда он загружает BaseNode, он борется со статической ссылкой на класс Peer. Я считаю, что это так, если BaseNode также требуется вручную.
- Пытается ли PHP в моей конфигурации автоматически загружать статически называемые методы/константы?
- Или может быть проблема в том порядке, в котором автозагрузчик Propel загружает вещи?
В настоящее время я буду продолжать, как есть — включение пира не является серьезной проблемой, — но я хотел бы знать, смогу ли я обойтись без него. Одним поводом для размышлений меньше!