5 * Contains Drupal\Console\Command\Generate\FormCommand.
8 namespace Drupal\Console\Command\Generate;
10 use Symfony\Component\Console\Input\InputInterface;
11 use Symfony\Component\Console\Input\InputOption;
12 use Symfony\Component\Console\Output\OutputInterface;
13 use Drupal\Console\Command\Shared\ServicesTrait;
14 use Drupal\Console\Command\Shared\ModuleTrait;
15 use Drupal\Console\Command\Shared\MenuTrait;
16 use Drupal\Console\Command\Shared\FormTrait;
17 use Symfony\Component\Console\Command\Command;
18 use Drupal\Console\Core\Style\DrupalStyle;
19 use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
20 use Drupal\Console\Generator\FormGenerator;
21 use Drupal\Console\Extension\Manager;
22 use Drupal\Console\Core\Utils\ChainQueue;
23 use Drupal\Console\Core\Utils\StringConverter;
24 use Drupal\Core\Render\ElementInfoManager;
25 use Drupal\Core\Routing\RouteProviderInterface;
27 abstract class FormCommand extends Command
29 use ContainerAwareCommandTrait;
41 protected $extensionManager;
51 protected $chainQueue;
54 * @var StringConverter
56 protected $stringConverter;
59 * @var ElementInfoManager
61 protected $elementInfoManager;
64 * @var RouteProviderInterface
66 protected $routeProvider;
70 * FormCommand constructor.
72 * @param Manager $extensionManager
73 * @param FormGenerator $generator
74 * @param ChainQueue $chainQueue
75 * @param StringConverter $stringConverter
76 * @param ElementInfoManager $elementInfoManager
77 * @param RouteProviderInterface $routeProvider
79 public function __construct(
80 Manager $extensionManager,
81 FormGenerator $generator,
82 ChainQueue $chainQueue,
83 StringConverter $stringConverter,
84 ElementInfoManager $elementInfoManager,
85 RouteProviderInterface $routeProvider
87 $this->extensionManager = $extensionManager;
88 $this->generator = $generator;
89 $this->chainQueue = $chainQueue;
90 $this->stringConverter = $stringConverter;
91 $this->elementInfoManager = $elementInfoManager;
92 $this->routeProvider = $routeProvider;
93 parent::__construct();
96 protected function setFormType($formType)
98 return $this->formType = $formType;
101 protected function setCommandName($commandName)
103 return $this->commandName = $commandName;
106 protected function configure()
109 ->setName($this->commandName)
112 $this->trans('commands.generate.form.description'),
118 $this->trans('commands.generate.form.help'),
126 InputOption::VALUE_REQUIRED,
127 $this->trans('commands.common.options.module')
132 InputOption::VALUE_OPTIONAL,
133 $this->trans('commands.generate.form.options.class')
138 InputOption::VALUE_OPTIONAL,
139 $this->trans('commands.generate.form.options.form-id')
144 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
145 $this->trans('commands.common.options.services')
150 InputOption::VALUE_OPTIONAL,
151 $this->trans('commands.common.options.inputs')
156 InputOption::VALUE_OPTIONAL,
157 $this->trans('commands.generate.form.options.path')
162 InputOption::VALUE_OPTIONAL,
163 $this->trans('commands.generate.form.options.menu_link_gen')
168 InputOption::VALUE_OPTIONAL,
169 $this->trans('commands.generate.form.options.menu_link_title')
174 InputOption::VALUE_OPTIONAL,
175 $this->trans('commands.generate.form.options.menu_parent')
180 InputOption::VALUE_OPTIONAL,
181 $this->trans('commands.generate.form.options.menu_link_desc')
188 protected function execute(InputInterface $input, OutputInterface $output)
190 $module = $input->getOption('module');
191 $services = $input->getOption('services');
192 $path = $input->getOption('path');
193 $class_name = $input->getOption('class');
194 $form_id = $input->getOption('form-id');
195 $form_type = $this->formType;
196 $menu_link_gen = $input->getOption('menu_link_gen');
197 $menu_parent = $input->getOption('menu_parent');
198 $menu_link_title = $input->getOption('menu_link_title');
199 $menu_link_desc = $input->getOption('menu_link_desc');
201 // if exist form generate config file
202 $inputs = $input->getOption('inputs');
203 $build_services = $this->buildServices($services);
207 ->generate($module, $class_name, $form_id, $form_type, $build_services, $inputs, $path, $menu_link_gen, $menu_link_title, $menu_parent, $menu_link_desc);
209 $this->chainQueue->addCommand('router:rebuild', []);
215 protected function interact(InputInterface $input, OutputInterface $output)
217 $io = new DrupalStyle($input, $output);
220 $module = $input->getOption('module');
222 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
223 $module = $this->moduleQuestion($io);
224 $input->setOption('module', $module);
228 $className = $input->getOption('class');
230 $className = $io->ask(
231 $this->trans('commands.generate.form.questions.class'),
234 $input->setOption('class', $className);
238 $formId = $input->getOption('form-id');
241 $this->trans('commands.generate.form.questions.form-id'),
242 $this->stringConverter->camelCaseToMachineName($className)
244 $input->setOption('form-id', $formId);
248 // @see use Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion
249 $services = $this->servicesQuestion($io);
250 $input->setOption('services', $services);
253 $inputs = $input->getOption('inputs');
255 // @see \Drupal\Console\Command\Shared\FormTrait::formQuestion
256 $inputs = $this->formQuestion($io);
257 $input->setOption('inputs', $inputs);
260 $path = $input->getOption('path');
262 if ($this->formType == 'ConfigFormBase') {
263 $form_path = '/admin/config/{{ module_name }}/{{ class_name_short }}';
264 $form_path = sprintf(
265 '/admin/config/%s/%s',
267 strtolower($this->stringConverter->removeSuffix($className))
270 $form_path = sprintf(
273 $this->stringConverter->camelCaseToMachineName($this->stringConverter->removeSuffix($className))
277 $this->trans('commands.generate.form.questions.path'),
280 if (count($this->routeProvider->getRoutesByPattern($path)) > 0) {
281 throw new \InvalidArgumentException(
284 'commands.generate.form.messages.path-already-added'
294 $input->setOption('path', $path);
297 // --link option for links.menu
298 if ($this->formType == 'ConfigFormBase') {
299 $menu_options = $this->menuQuestion($io, $className);
300 $menu_link_gen = $input->getOption('menu_link_gen');
301 $menu_link_title = $input->getOption('menu_link_title');
302 $menu_parent = $input->getOption('menu_parent');
303 $menu_link_desc = $input->getOption('menu_link_desc');
304 if (!$menu_link_gen || !$menu_link_title || !$menu_parent || !$menu_link_desc) {
305 $input->setOption('menu_link_gen', $menu_options['menu_link_gen']);
306 $input->setOption('menu_link_title', $menu_options['menu_link_title']);
307 $input->setOption('menu_parent', $menu_options['menu_parent']);
308 $input->setOption('menu_link_desc', $menu_options['menu_link_desc']);