Как автоматически сгенерировать сопоставители 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);
Другие вопросы по тегам