diff --git a/src/Command/ContainerAwareCommand.php b/src/Command/ContainerAwareCommand.php index c2dc7ad9a..9fc46b229 100644 --- a/src/Command/ContainerAwareCommand.php +++ b/src/Command/ContainerAwareCommand.php @@ -104,6 +104,7 @@ public function validateServiceExist($service_name, $services = null) public function validateModule($machine_name) { + $machine_name = $this->validateMachineName($machine_name); $modules = array_merge($this->getModules(true), $this->getModules()); if (in_array($machine_name, $modules)) { throw new \InvalidArgumentException(sprintf('Module "%s" already exist.', $machine_name)); @@ -121,6 +122,16 @@ public function validateModulePath($module_path) return $this->getValidator()->validateModulePath($module_path); } + public function validateClassName($class_name) + { + return $this->getValidator()->validateClassName($class_name); + } + + public function validateMachineName($machine_name) + { + return $this->getValidator()->validateMachineName($machine_name); + } + /** * @return \Drupal\AppConsole\Utils\StringUtils */ diff --git a/src/Command/GeneratorControllerCommand.php b/src/Command/GeneratorControllerCommand.php index bc0be6d46..bbf9a0660 100644 --- a/src/Command/GeneratorControllerCommand.php +++ b/src/Command/GeneratorControllerCommand.php @@ -87,10 +87,16 @@ protected function interact(InputInterface $input, OutputInterface $output) // --class-name option $class_name = $input->getOption('class-name'); if (!$class_name) { - $class_name = $dialog->ask( + $class_name = 'DefaultController'; + $class_name = $dialog->askAndValidate( $output, - $dialog->getQuestion('Enter the controller name', 'DefaultController'), - 'DefaultController' + $dialog->getQuestion('Enter the controller class name', $class_name), + function ($class_name) { + return $this->validateClassName($class_name); + }, + false, + $class_name, + null ); } $input->setOption('class-name', $class_name); diff --git a/src/Command/GeneratorModuleCommand.php b/src/Command/GeneratorModuleCommand.php index 664aeb218..48000a789 100644 --- a/src/Command/GeneratorModuleCommand.php +++ b/src/Command/GeneratorModuleCommand.php @@ -49,7 +49,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } } - $module = $this->validateModule($input->getOption('module')); + $module = $this->validateModuleName($input->getOption('module')); $module_path = $this->validateModulePath($input->getOption('module-path')); $description = $input->getOption('description'); $core = $input->getOption('core'); @@ -57,7 +57,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $controller = $input->getOption('controller'); $tests = $input->getOption('tests'); $structure = $input->getOption('structure'); - $machine_name = $input->getOption('machine-name'); + $machine_name = $this->validateModule($input->getOption('machine-name')); $generator = $this->getGenerator(); $generator->generate($module, $machine_name, $module_path, $description, $core, $package, $controller, $tests, $structure); @@ -90,7 +90,16 @@ protected function interact(InputInterface $input, OutputInterface $output) } if (!$module) { - $module = $dialog->ask($output, $dialog->getQuestion('Module name', '')); + $module = $dialog->askAndValidate( + $output, + $dialog->getQuestion('Module name', ''), + function ($module) { + return $this->validateModuleName($module); + }, + false, + null, + null + ); } $input->setOption('module', $module); diff --git a/src/Utils/Validators.php b/src/Utils/Validators.php index c3efc77db..f6366ce54 100644 --- a/src/Utils/Validators.php +++ b/src/Utils/Validators.php @@ -9,16 +9,37 @@ class Validators { + const REGEX_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/'; + const REGEX_MACHINE_NAME = '/^[a-z0-9_]+$/'; + public function __construct() { } public function validateModuleName($module) { - if (!empty($module)) + if (!empty($module)) { return $module; - else + } + else { throw new \InvalidArgumentException(sprintf('Module name "%s" is invalid.', $module)); + } + } + + public function validateClassName($class_name){ + if (preg_match(self::REGEX_CLASS_NAME, $class_name)) { + return $class_name; + } else { + throw new \InvalidArgumentException(sprintf('Class name "%s" is invalid.', $class_name)); + } + } + + public function validateMachineName($machine_name){ + if (preg_match(self::REGEX_MACHINE_NAME, $machine_name)) { + return $machine_name; + } else { + throw new \InvalidArgumentException(sprintf('Machine name "%s" is invalid.', $machine_name)); + } } public function validateModulePath($module_path)