PHP Doctrine разочарование: загрузка моделей не работает ..? - PullRequest
1 голос
/ 30 марта 2010

Я почти теряю это, я действительно надеюсь, что кто-то может мне помочь!

Я использую Doctrine с CodeIgniter. Все настроено правильно и работает, пока я не создаю классы и не просматриваю веб-сайт.

Неустранимая ошибка: класс BaseObjecten не найден в /var/www/vhosts/domain.com/application/models/Objecten.php строке 13

.

Я использую следующий загрузчик (как плагин CodeIgniter):

<?php
// system/application/plugins/doctrine_pi.php

// load Doctrine library
require_once BASEPATH . '/plugins/Doctrine/lib/Doctrine.php';

// load database configuration from CodeIgniter
require_once APPPATH.'/config/database.php';

// this will allow Doctrine to load Model classes automatically
spl_autoload_register(array('Doctrine', 'autoload'));

// we load our database connections into Doctrine_Manager
// this loop allows us to use multiple connections later on
foreach ($db as $connection_name => $db_values) {

    // first we must convert to dsn format
    $dsn = $db[$connection_name]['dbdriver'] .
        '://' . $db[$connection_name]['username'] .
        ':' . $db[$connection_name]['password'].
        '@' . $db[$connection_name]['hostname'] .
        '/' . $db[$connection_name]['database'];

    Doctrine_Manager::connection($dsn,$connection_name);
}

// CodeIgniter's Model class needs to be loaded
require_once BASEPATH.'/libraries/Model.php';

// telling Doctrine where our models are located
Doctrine::loadModels(APPPATH.'/models');

// (OPTIONAL) CONFIGURATION BELOW

// this will allow us to use "mutators"
Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);

// this sets all table columns to notnull and unsigned (for ints) by default
Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_DEFAULT_COLUMN_OPTIONS,
    array('notnull' => true, 'unsigned' => true));

// set the default primary key to be named 'id', integer, 4 bytes
Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
    array('name' => 'id', 'type' => 'integer', 'length' => 4));
?>

Любой

p.s. Я также попытался добавить следующее сразу после // (ДОПОЛНИТЕЛЬНАЯ КОНФИГУРАЦИЯ)

Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
spl_autoload_register(array('Doctrine', 'modelsAutoload'));

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

Просто небольшой взлом

Добавить эту строку

Doctrine::loadModels(APPPATH.'/models/generated');

до ...

Doctrine::loadModels(APPPATH.'/models');

или другой путь, по которому вы думаете, что ваши автоматически сгенерированные базовые классы находятся в приложение / помощник / doctrine_pi.php

2 голосов
/ 31 марта 2010

Пытались

<?php

spl_autoload_register(array('Doctrine', 'autoload'));
spl_autoload_register(array('Doctrine', 'modelsAutoload'));
$manager = Doctrine_Manager::getInstance();

$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
$manager->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES, true);
Doctrine::loadModels(APPPATH.'models');

Кроме того, в зависимости от вашей серверной платформы вы можете попробовать использовать xdebug и IDE, которые поддерживают точки останова в реальном времени. Эта комбинация позволяет относительно быстро отследить большинство проблем с автозагрузчиком, установив точку останова в первой строке classdef, у которой есть проблема с зависимостями.

...