как автоматически сгенерировать xml или yaml мапперы из существующей базы данных в доктрине 2 ... но не используя cli - PullRequest
0 голосов
/ 19 марта 2012

Я новичок в мире ORM и интегрирую доктрину 2 с проектом zf. Я просмотрел документацию доктрины и различные статьи и интегрировал ее :).

У меня есть существующая БД, из которой я могу генерировать свои мапперы и сущности. Я готов использовать сопоставители XML / YAML вместо аннотаций по умолчанию.

Все, что я вижу повсюду, это команды CLI для генерации картографических объектов и сущностей, выполняя следующие команды в каталоге bin, где " doctrine.php (предоставлено в официальных документах доктрины). )" Файл существует.

Для создания картографов:

         *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 Ответ

0 голосов
/ 01 сентября 2012

Попробуйте следующее (в каком-то методе контроллера):

$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);
...