Автозагрузчик для Propel 1.5.6 не работает - PullRequest
2 голосов
/ 13 февраля 2011

Я установил 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 загружает вещи?

В настоящее время я продолжу в том же духе - не проблема в том, чтобы включить одноранговый узел - но я бы хотелхотел бы знать, смогу ли я обойтись без этого.Еще одна вещь для размышления!

1 Ответ

2 голосов
/ 25 октября 2011

В этом случае автозагрузчик не работал, потому что моя модель сгенерировала класс, конфликтующий с интерфейсом, предоставленным ядром Propel. Переименование этого сработало бы, как и при использовании системы пространства имен (хотя, конечно, последняя зависит от использования PHP 5.3. +).

...