Как автоматически сгенерировать сопоставители xml или yaml из существующей базы данных в доктрине 2... но не используя cli
Я новичок в мире ORM и интегрирую доктрину 2 с проектом zf. Я просмотрел документацию доктрины и различные статьи и интегрировал ее:).
У меня есть существующая БД, из которой я получил, чтобы генерировать свои мапперы и сущности. Я готов использовать сопоставители XML/YAML вместо аннотаций по умолчанию.
Все, что я вижу повсюду, - это команды CLI для генерации картографических объектов и сущностей, выполняя приведенные ниже команды в каталоге bin, где существует файл "doctrine.php(предоставляется в официальных документах doctrine)".
Чтобы создать Mappers:
*php doctrine orm:convert-mapping --from-database xml /path/to/mappers*
Чтобы сгенерировать классы сущностей / моделей:
*./doctrine orm:generate-entities /path/to/models/or/entities*
Но я не хочу выполнять команды и генерировать мапперы / сущности. Я ищу сценарий PHP, который делает это для меня (вызывая метод действия в контроллере, например: www.doctrineproj.com/admin/mdoels/autogenerate/).
Есть ли у нас какой-либо класс API или какой-либо способ сделать это с помощью php-кода вместо выполнения сценария CLI. может быть, позвонив как
Для создания картографов: doctrine_core:: generateMappers(dbParams,mapperDriver)
Чтобы создать сущности: doctrine_core::generateEntities(metaData)
ИЛИ ЖЕ
Есть ли способ выполнить все команды CLI из файла сценария php, используя систему, как вызовы?
Я попытался использовать exec() и system() с помощью приведенных выше команд cli. Но это не работает хорошо:(.
Вот код, который я использовал для генерации картографов из моего метода действия
public function autogenerateAction () {
$result = array();
//change the current working DIR to bin
$cliPath = "cd ". APPLICATION_PATH . "/bin";
exec($cliPath,$result);
//construct the CMD to generate the XML files from the DB tables
$mapperDir = APPLICATION_PATH. "/models/entities/xml-mapper/";
$mapperType = "xml";
$generateMappersCmd = "php doctrine orm:convert-mapping --from-database " . $mapperType . ' ' . $mapperDir ;
//execute the CMD
$result = system($generateMappersCmd);
}
но приведенный выше код не создает сопоставителей в каталоге назначения.
Пожалуйста, предложите мне лучшее решение для автоматической генерации картографических объектов и сущностей из БД с использованием автоматического сценария php.
В ожидании лучшего решения.
Спасибо Радж
1 ответ
Попробуйте следующее (в некотором методе контроллера):
$kernel = $this->get('kernel');
$application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel);
$application->setAutoExit(false);
$options = array(
'command' => 'doctrine:generate:entity',
'--entity' => "SomeDemoBundle:YourEntityName",
'--fields' => "name:string(255) price:float description:text",
'--with-repository' => true,
'--format' => 'xml',
);
$fp = tmpfile();
$out = new StreamOutput($fp);
$in = new \Symfony\Component\Console\Input\ArrayInput($options);
$in->setInteractive(false);
$application->run($in, $out);