#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, поэтому я не совсем уверен, как это работает, но это так. Приветствуются любые комментарии.