Хак Symfony — выполнение сценария оболочки для перезаписи файлов yaml

Я использую akeneo pim, который использует symfony 3.4 для решения некоторых желаний клиентов. Итак, я впервые использую symfony и столкнулся с некоторыми проблемами. Что мне нужно сделать, так это создать пользовательский интерфейс, в котором пользователь может добавлять свои собственные переводы для главного меню. И эти переводы берутся из файла конфигурации /translation/jsmessages.en.yml. Итак, я создал пакет, изменил файл yaml и все почти готово. Но теперь, когда я меняю файл yaml, мне нужно очистить кеш, сбросить переводы, запустить веб-пакет, иначе изменение текста меню не будет видно. Поэтому я хотел создать сценарий оболочки для этого. Что-то вроде этого:

public function indexAction()
{
    (new YmlReader())->readYmlFile();

    exec('rm -rf ./web/bundles/* ./web/css/* ./web/js/*');
    exec('rm -rf web/js/translations/*');
    exec('php bin/console pim:install:assets --env=prod');
    exec('php bin/console assets:install --symlink web');
    exec('php bin/console oro:translation:dump');
    exec('yarn run webpack');

    return $this->render('PimcWhiteLabelBundle:Default:index.html.twig');
}

Но это не работает, может быть, потому что он выполняет скрипт как пользователь www-data, я не знаю. И теперь я пытаюсь создать команду. Есть ли хороший способ сделать это через symfony, если кто-то знает, как лучше всего это сделать в symfony. Итак, я создал команду, мне просто нужно направление, как к этому подойти:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $argument = $input->getArgument('argument');

    if ($input->getOption('option')) {
        // my exec commands
    }

    $output->writeln('Command result.');
}

Спасибо за все что ты сделал для меня.


person user2450639    schedule 06.08.2018    source источник
comment
Вы сказали, что это не работает, что именно? Можете ли вы предоставить какое-либо сообщение об ошибке? выход?   -  person Franck Gamess    schedule 06.08.2018
comment
Спасибо за ваш ответ, я добавил ответ, однако я не знаю, лучший ли это способ сделать это, но пока он работает.   -  person user2450639    schedule 06.08.2018


Ответы (1)


Я решил эту проблему с помощью команды exec, она почему-то заработала :)

protected function execute(InputInterface $input, OutputInterface $output)
{
    exec('rm -rf web/js/translations/*');
    exec('php bin/console pim:install:assets --env=prod');
    exec('php bin/console assets:install --symlink web');
    exec('php bin/console oro:translation:dump');
    exec('yarn run webpack');

    $output->writeln('Translations dumped successfully.');
}
person user2450639    schedule 06.08.2018
comment
Вы также можете использовать компонент Symfony Process: symfony.com/doc/current/components/process. html - person Franck Gamess; 06.08.2018