createInterviewer($vars); $vars['machine_name'] = $ir->askMachineName(); $vars['name'] = $ir->askName(); // Machine name validator does not allow dots. $validator = new Chained( new Required(), new RegExp('/^[a-z][a-z0-9_\.]*[a-z0-9]$/', 'The value is not correct machine name.'), ); $vars['plugin_type'] = $ir->ask('Plugin type', '{machine_name}', $validator); $discovery_types = [ 'annotation' => 'Annotation', 'attribute' => 'Attribute', 'yaml' => 'YAML', 'hook' => 'Hook', ]; $vars['discovery'] = $ir->choice('Discovery type', $discovery_types, 'Annotation'); $vars['class_prefix'] = '{plugin_type|camelize}'; $assets->addServicesFile()->template('{discovery}/model.services.yml.twig'); $assets->addFile('src/{class_prefix}Interface.php', '{discovery}/src/ExampleInterface.php.twig'); $assets->addFile('src/{class_prefix}PluginManager.php', '{discovery}/src/ExamplePluginManager.php.twig'); switch ($vars['discovery']) { case 'annotation': $assets->addFile('src/Annotation/{class_prefix}.php', 'annotation/src/Annotation/Example.php.twig'); $assets->addFile('src/{class_prefix}PluginBase.php', 'annotation/src/ExamplePluginBase.php.twig'); $assets->addFile('src/Plugin/{class_prefix}/Foo.php', 'annotation/src/Plugin/Example/Foo.php.twig'); break; case 'attribute': $assets->addFile('src/Attribute/{class_prefix}.php', 'attribute/src/Attribute/Example.php.twig'); $assets->addFile('src/{class_prefix}PluginBase.php', 'attribute/src/ExamplePluginBase.php.twig'); $assets->addFile('src/Plugin/{class_prefix}/Foo.php', 'attribute/src/Plugin/Example/Foo.php.twig'); break; case 'yaml': $assets->addFile('{machine_name}.{plugin_type|pluralize}.yml', 'yaml/model.examples.yml.twig'); $assets->addFile('src/{class_prefix}Default.php', 'yaml/src/ExampleDefault.php.twig'); break; case 'hook': $assets->addFile('{machine_name}.module', 'hook/model.module.twig')->appendIfExists(7); $assets->addFile('src/{class_prefix}Default.php', 'hook/src/ExampleDefault.php.twig'); break; } } }