Не удается загрузить класс \ Doctrine \ ORM \ Configuration () с загрузчиком классов Doctrine 2 в файле cli-config.php при использовании интерфейса командной строки doctrine - PullRequest
0 голосов
/ 03 января 2011

Я выполнил шаги, описанные в следующей статье, чтобы интегрировать Zend Framework 1.11 и Doctrine 2:

http://jeboy25.blogspot.com/2010/08/doctrine-2-and-zend-framework-110.html

И у меня есть 3 вопроса по статье:

1-В разделе «SchemaToolClass» я не понимаю, почему автор включает файл schema_tool.php внизу файла ZendProject / public / index.php после: $ APPLICATION-> начальной загрузки () -> Run ();

2 - когда я выполняю команду "php doctrine orm: schema-tool: create", в командной строке появляется следующее сообщение об ошибке: Трассировка HP Stack: PHP 1. {main} () / Library / WebServer / Documents / carlending / application / tools / doctrine: 0 PHP 2. include () / Library / WebServer / Documents / carlending / application / tools / doctrine: 7 PHP 3. require () /Library/WebServer/Documents/carlending/application/tools/doctrine.php:41 PHP 4. Doctrine \ Common \ ClassLoader-> loadClass ($ className = неинициализировано ) ошибка возникает в файле cli-config.php в строке '$ config = new \ Doctrine \ ORM \ Configuration ();'

3-Можете ли вы объяснить, почему автор помещает сгенерированные доктриной прокси и модели в папку домена. Разве не лучше, чтобы они находились в папке моделей как любой другой класс моделей. Иногда я также вижу некоторых программистов, использующих «сгенерированную» папку внутри моделей.

Если бы вам удалось создать рабочую интеграцию с Zend 1.x и Doctrine, я был бы очень рад, если бы вы также могли выслать мне рабочий проект, который был бы очень полезен.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

После прочтения раздела «Получение EntityManager» в http://www.doctrine -project.org / docs / orm / 2.1 / en / tutorials / Getting-Start-xml-edition.html

Я думаю, вам нужны следующие три строки для загрузки:

use Doctrine\ORM\Tools\Setup;
require_once 'Doctrine/ORM/Tools/Setup.php';
Setup::registerAutoloadPEAR();
0 голосов
/ 06 января 2011

Я получил его на работу несколько недель назад, вот мой код. Доктрина 2 действительно хороша:)

В моей начальной загрузке

/**
 * Initialize auto loader of Doctrine
 *
 * @return Doctrine_Manager
 */
protected function _initDoctrine() {
    $this->bootstrap('autoload');

    require_once('Doctrine/Common/ClassLoader.php');

    // Create the doctrine autoloader and remove it from the spl autoload stack (it adds itself)
    require_once 'Doctrine/Common/ClassLoader.php';
    $doctrineAutoloader = array(new \Doctrine\Common\ClassLoader(), 'loadClass');
    //$doctrineAutoloader->register();
    spl_autoload_unregister($doctrineAutoloader);

    $autoloader = Zend_Loader_Autoloader::getInstance();

    // Push the doctrine autoloader to load for the Doctrine\ namespace
    $autoloader->pushAutoloader($doctrineAutoloader, 'Doctrine');

    $classLoader = new \Doctrine\Common\ClassLoader('Entities', realpath(__DIR__ . '/models/'), 'loadClass');
    $autoloader->pushAutoloader(array($classLoader, 'loadClass'), 'Entities');

    $classLoader = new \Doctrine\Common\ClassLoader('Symfony', realpath(__DIR__ . '/../library/Doctrine/'), 'loadClass');
    $autoloader->pushAutoloader(array($classLoader, 'loadClass'), 'Symfony');

    $doctrineConfig = $this->getOption('doctrine');
    $config = new \Doctrine\ORM\Configuration();

    $cache = new \Doctrine\Common\Cache\ArrayCache;
    $config->setMetadataCacheImpl($cache);
    $config->setQueryCacheImpl($cache);

    $driverImpl = new Doctrine\ORM\Mapping\Driver\YamlDriver(APPLICATION_PATH . '/../configs/mappings/yaml');
    //$driverImpl = $config->newDefaultAnnotationDriver($doctrineConfig['path']['entities']);
    $config->setMetadataDriverImpl($driverImpl);

    $config->setProxyDir(APPLICATION_PATH . '/../proxies');
    $config->setProxyNamespace('App\Proxies');

    $connectionOptions = array(
        'driver' => $doctrineConfig['conn']['driv'],
        'user' => $doctrineConfig['conn']['user'],
        'password' => $doctrineConfig['conn']['pass'],
        'dbname' => $doctrineConfig['conn']['dbname'],
        'host' => $doctrineConfig['conn']['host']
    );

    $registry = Zend_Registry::getInstance();
    $registry->entitymanager = $em;

    return $em;
}

Схема и т. Д.

Я использую yaml, как вы видели выше, я не просматривал учебник, но я использовал инструмент командной строки, который работает как шарм, мой doctrine.php (находится в APPLICATION / bin):

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path()
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/../configs/application.ini'
);

$application->getBootstrap()->bootstrap('doctrine');


require_once __DIR__ . '/../Bootstrap.php';

$em = $application->getBootstrap()->getResource('doctrine');

$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em, APPLICATION_PATH . "/configs/mappings")
));

\Doctrine\ORM\Tools\Console\ConsoleRunner::run($helperSet);

Сначала вы должны сгенерировать ваши сущности:

  • Создает все модели без удаления, создает также аннотации - ./doctrine orm: generate-entity ~ / Public / my_app / application / models / --regenerate-entity 0 --generate-annotations 1

затем создайте свою схему ./doctrine orm: схема-инструмент: создать --dump-sql или же ./doctrine orm: схема-инструмент: обновление --dump-sql

прокси-серверы на самом деле не являются частью ваших моделей, они просто используются Doctrine для внутреннего использования, поэтому я выделил его как отдельный объект из папки моделей, но, думаю, это не имеет значения: ./doctrine orm: generate-proxies ~ / Public / my_app / proxies /

Не забудьте добавить разрешения на запись в прокси для группы apache.

Хм ... думаю, я не совсем объяснил решение Jeboy, но, возможно, мой код поможет вам начать, это заняло у меня некоторое время, но как только он запущен и работает, это работает как шарм :) PS Не забывайте про «пространство имен сущностей»; в каждой из ваших моделей (она должна генерироваться автоматически)

...