Doctrine 2 команды CLI из PHP

#doctrine #mapping #command-line-interface

#доктрина #сопоставление #интерфейс командной строки

Вопрос:

Привет всем. Я пишу программу, которая преобразует некоторые данные в нашей базе данных, а затем вызывает Doctrine для создания файлов YAML из указанной структуры базы данных Mysql. У меня есть Doctrine, работающая из PHP. Однако я не могу понять, как вызывать команды CLI из PHP. Ниже приведена команда командной строки Doctrine 2, которая делает то, что мне нужно.

php ./doctrine orm:преобразовать-сопоставление —filter=»users» —из базы данных yml ./test

Эта команда работает из командной строки Linux, но как мне сделать то же самое с помощью объектов Doctrine? Я не хочу просто использовать инструкцию PHP exec для отправки команды в оболочку. Я хочу использовать объектную модель Doctrine.

Ответ №1:

Не надо!:

По-видимому, это не очень распространенный метод программирования. Однако я использовал Doctrine из PHP, вызвав его с помощью команды PHP EXEC. Я знаю, вы говорили, что не хотели бы делать это таким образом. Однако на самом деле это работает довольно хорошо. Ниже приведен пример такого решения.

 $cmd_string = "php ./doctrine orm:generate-entities --generate-annotations=1 --regenerate-entities=1 $this->entity_file_dir";
$result = array();
exec($cmd_string, amp;$result);  

Надеюсь, это поможет,
-Дон!

Ответ №2:

Я наткнулся на этот вопрос при попытке выполнить команду непосредственно из PHP-скрипта, без использования CLI.

В частности, мне нужно было вызвать orm: обеспечить-производственные-настройки. Каждая команда Doctrine имеет свой собственный класс:http://www.doctrine-project.org/api/orm/2.4/namespace-Doctrine.ORM.Tools .Консоль.Command.html

Я решил это следующим образом:

 $entityManager = ...; // Get the entity manager somehow in your application

// Creates the helper set
$helperSet = DoctrineORMToolsConsoleConsoleRunner::createHelperSet($entityManager);

// Initializes the desired command and sets the helper set
// In your case it should be ConvertMappingCommand instead
$command = new DoctrineORMToolsConsoleCommandEnsureProductionSettingsCommand();
$command->setHelperSet($helperSet);

// Initializes the input
// Alternatives: http://api.symfony.com/2.0/Symfony/Component/Console/Input.html
$input = new SymfonyComponentConsoleInputArgvInput(); // Input coming from the CLI arguments

// Initializes the output
// Alternatives: http://api.symfony.com/2.0/Symfony/Component/Console/Output.html
$output = new SymfonyComponentConsoleOutputConsoleOutput(); // Prints the output in the console

// Runs the command
$command->run($input, $output);
  

Я новичок в Doctrine, поэтому я не совсем уверен, как это работает, но это так. Приветствуются любые комментарии.