Не могу загрузить модели в CodeIgniter с Doctrine - PullRequest
3 голосов
/ 03 октября 2010

Я пробовал CodeIgniter. Пока мне это нравится. Я решил также попробовать Доктрину, потому что я так много слышу об ORM, и это Доктрина великолепна. Я нашел несколько уроков:

Я перепробовал все методы, которые я нашел в тех, чтобы попытаться установить работающую установку Doctrine, но я все еще не могу загрузить свою модель. Одна общая нить во всех этих документах состоит в том, что они являются старыми и ссылаются на старые версии Doctrine и / или CI, даже на собственные документы Doctrine, ссылочную версию 0.11. Я использую CodeIgniter-1.7.2 и Doctrine-1.2.3.

Есть ли у кого-нибудь актуальная документация? Кто-нибудь может увидеть, где код ниже идет не так? Это основано на ссылке phpandstuff.

File Structure
root
   \_system
        \_application
            \_config
            \_controllers
            \_models
            \_views
        \_plugins
            \_doctrine
                \_lib
                    \_Doctrine.php
            \_doctrine_pi.php

система / плагины / 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

//below is the suggested method of loading models
//I also tried a user's suggestion of "modelsAutoload"
//spl_autoload_register(array('Doctrine', 'autoload'));
//spl_autoload_register(array('Doctrine_Core', 'modelsAutoload'));

// 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
//Below is another user's suggestion, this also fails
//within my setup.
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');


// (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));

из system / application / config / autoload.php

/*
| -------------------------------------------------------------------
|  Auto-load Plugins
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['plugin'] = array('captcha', 'js_calendar');
*/

$autoload['plugin'] = array('doctrine');

корень / системы / модель / User.php

class User extends Doctrine_Record {

    function __construct(){
        parent::__construct();
    }

    function setTableDefinition(){
        $this->hasDefinition("username", "string", 255);
        $this->hasDefinition("password", "string", 255);
    }

}

Если кто-то захочет увидеть мой контроллер или что-то еще, дайте мне знать. Контроллер просто echo s «добавил пользователя» и использует доктрину для сохранения пользователя. При этом встречается сообщение «Неустранимая ошибка: класс« Пользователь »не найден ...»

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Я следовал этому уроку здесь: http://www.scribd.com/Ci-Doctrine/d/43303007

Обратите внимание: если вы находитесь в Windows, APPPATH может быть неправильно настроен, например, вы можете получить что-то вроде C: \ wamp \ www \ v1 / system / application /. Поэтому установите $ system_folder на абсолютный путь в index.php в корневом каталоге.

Наслаждайтесь

0 голосов
/ 18 октября 2010

Вот так выглядит моя установка. Он предназначен для приложения Zend Framework, но вы должны без проблем перевести его на CI.

try {
    Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE);
    Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_VALIDATE, Doctrine::VALIDATE_ALL);
    $conn = Doctrine_Manager::connection($this->_db->getConnection());
    Doctrine::loadModels($this->_root . '/application/models');
} catch (Zend_Db_Adapter_Exception $e) {
    echo 'Incorrect database login: ' . $e->getMessage();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...