Windows 8.1, ZendFramework 2
Привет
Запускаю ком. строку винды, перехожу в каталог проекта zf2. Из корня каталога запускаю команду:
php ./vendor/doctrine/orm/bin/doctrine orm:*
— вместо звездочки команда, понятная Doctrine (validate/create и т.д.).
Результат выполнения команды выше:
F:\Server\domains\zf2-skeleton>php ./vendor/doctrine/orm/bin/doctrine orm:valida
te-schema
You are missing a "cli-config.php" or "config/cli-config.php" file in your
project, which is required to get the Doctrine Console working. You can use the
following sample as a template:
<?php
use Doctrine\ORM\Tools\Console\ConsoleRunner;
// replace with file to your own project bootstrap
require_once 'bootstrap.php';
// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();
return ConsoleRunner::createHelperSet($entityManager);
Читаем, чо нам пишут и создаем файл
config/cli-config.php
с соответствующим содержимым:
<?php
use Doctrine\ORM\Tools\Console\ConsoleRunner;
// replace with file to your own project bootstrap
require_once 'bootstrap.php';
// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();
return ConsoleRunner::createHelperSet($entityManager);
1. Нам сказано поменять файл
bootstrap.php
на свой. Правильно ли я понимаю, что в zf2 автозагрузчик (бутстрап) это файл
init_autoloader.php
в корне проекта? Я поставил его пока что, но в любом случае есть еще одна проблема.
2. Второй момент: необходимо получить EntityManager моего Zf2. Вопрос как его получить? Гуглил, но вариантов очень много и, так как я новичок (нуб, дно... — подставить свое) в zf2, я не знаю какой правильный и как это сделать правильно.
Например, я нашел это:
$this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
Но с этим можно работать только в методе какого-то класса или функции и при этом передать в нее что-то из чего мы вытащим em. ServiceLocator $sl какой-нибудь наверное. Опять же для этого нужна какая-то функция init или хз. В общем вопрос — как это сделать.
P.S.: вообще, везде сказано, что чтобы работать с DoctrineORM таким способом надо юзать немного другую команду:
php vendor\bin\doctrine-module orm:validate-schema
— но в моем случае эта команда выдает примерно это:
<?
require_once __DIR__ . '/src/MyZfcAdmin/Module.php';
PHP Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (MyZfcAdmin) could not be initialized.' in F:\Server\domains\zf2-skeleton\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php:189
Stack trace:
#0 F:\Server\domains\zf2-skeleton\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php(163): Zend\ModuleManager\ModuleManager->loadModuleByName(Object(Zend\ModuleManager\ModuleEvent))
#1 F:\Server\domains\zf2-skeleton\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php(90): Zend\ModuleManager\ModuleManager->loadModule('MyZfcAdmin')
#2 [internal function]: Zend\ModuleManager\ModuleManager->onLoadModules(Object(Zend\ModuleManager\ModuleEvent))
#3 F:\Server\domains\zf2-skeleton\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\ModuleManager\ModuleEvent))
#4 F:\Server\domains\zf2-skeleton\vendor\zendframework\zendframework\library\Zend\Ev in F:\Server\domains\zf2-skeleton\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php on line 189
При этом сайт открывается без проблем, модуль myZfcAdmin делает свое дело и работает так, как нужно.
Я это к чему говорю. Я получается костыль сейчас вставляю... Может стоит разобраться с работой команды
php vendor\bin\doctrine-module orm:validate-schema
, а не делать костыль?
На so.com не очень с этим помогли, может быть, тут что-то найду полезное по этому поводу.
Заранее спасибо.