diff --git a/Builder/Generator.php b/Builder/Generator.php index 555d60e9..250e742b 100644 --- a/Builder/Generator.php +++ b/Builder/Generator.php @@ -445,6 +445,22 @@ public function getFromBundleConfig($configPath, $default = null) ); } + /** + * @return array + */ + public function getBuildersFromYaml() + { + return $this->getFromYaml('builders', array()); + } + + /** + * @return boolean + */ + public function isFormsOnly() + { + return $this->getFromYaml('params.forms_only', false); + } + /** * @param array $array The array to traverse. * @param string $path Path string with point for levels. diff --git a/Command/GenerateAdminCommand.php b/Command/GenerateAdminCommand.php index dda80d45..ecfc349e 100644 --- a/Command/GenerateAdminCommand.php +++ b/Command/GenerateAdminCommand.php @@ -26,9 +26,9 @@ protected function configure() new InputOption('dir', '', InputOption::VALUE_REQUIRED, 'The directory where the bundle is', 'src/'), new InputOption('bundle-name', '', InputOption::VALUE_REQUIRED, 'The bundle name'), new InputOption('generator', '', InputOption::VALUE_REQUIRED, 'The generator service (propel, doctrine, doctrine_odm)', 'doctrine'), - new InputOption('model-name', '', InputOption::VALUE_REQUIRED, 'Base model name for admin module, without namespace.', 'YourModel'), + new InputOption('model-name', '', InputOption::VALUE_REQUIRED, 'Base model name for admin module, without namespace.'), new InputOption('prefix', '', InputOption::VALUE_REQUIRED, 'The generator prefix ([prefix]-generator.yml)'), - + new InputOption('forms-only', null, InputOption::VALUE_NONE, 'If set, only forms will be auto-generated.') )) ->setHelp(<<admin:generate-admin command helps you generates new admin pages for a given model. @@ -216,7 +216,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $generator->setPrefix($input->getOption('prefix')); $generator->generate( $bundle, - $input->getOption('model-name') + $input->getOption('model-name'), + $input->hasOption('forms-only') ); $output->writeln('Generating the bundle code: OK'); @@ -231,7 +232,9 @@ protected function execute(InputInterface $input, OutputInterface $output) $runner($this->updateKernel($output, $this->getContainer()->get('kernel'), $bundle)); // routing - $runner($this->updateRouting($output, $bundle, $input->getOption('prefix'))); + if (!$input->hasOption('forms-only')) { + $runner($this->updateRouting($output, $bundle, $input->getOption('prefix'))); + } $questionHelper->writeGeneratorSummary($output, $errors); } @@ -309,13 +312,13 @@ protected function updateRouting(OutputInterface $output, Bundle $bundle, $prefi try { $ret = $routing->addResource($bundle->getName(), 'admingenerator'); if (!$ret) { - $help = sprintf(" resource: \"@%s/Controller/%s/\"\n type: admingenerator\n", $bundle->getName(), ucfirst($prefix)); - $help .= " prefix: /\n"; + $help = sprintf("\t\tresource: \"@%s/Controller/%s/\"\n\ttype:\tadmingenerator\n", $bundle->getName(), ucfirst($prefix)); + $help .= "\t\tprefix:\t/\n"; return array( '- Import the bundle\'s routing resource in the app main routing file:', '', - sprintf(' %s:', $bundle->getName()), + sprintf('\t%s:', $bundle->getName()), $help, '', ); diff --git a/Generator/BundleGenerator.php b/Generator/BundleGenerator.php index 178de1cf..8198c0df 100644 --- a/Generator/BundleGenerator.php +++ b/Generator/BundleGenerator.php @@ -93,7 +93,7 @@ public function setPrefix($prefix) * @param Bundle $bundle * @param string $modelName */ - public function generate(Bundle $bundle, $modelName) + public function generate(Bundle $bundle, $modelName, $formsOnly) { $dir = $bundle->getTargetDirectory(); @@ -127,35 +127,13 @@ public function generate(Bundle $bundle, $modelName) 'model_folder' => $modelFolder, 'model_name' => $modelName, 'prefix' => ucfirst($this->prefix), + 'forms_only' => $formsOnly ); if (!file_exists($dir.'/'.$bundle->getName().'.php')) { $this->renderGeneratedFile('Bundle.php.twig', $dir.'/'.$bundle->getName().'.php', $parameters); } - foreach ($this->actions as $action => $actionProperties) { - $parameters['action'] = $action; - - $controllerFile = $dir.'/Controller/' - .($this->prefix ? ucfirst($this->prefix).'/' : '').$action.'Controller.php'; - $this->copyPreviousFile($controllerFile); - $this->renderGeneratedFile( - 'DefaultController.php.twig', - $controllerFile, - $parameters - ); - - foreach ($actionProperties['views'] as $templateName) { - $templateFile = $dir.'/Resources/views/'.ucfirst($this->prefix).$action.'/'.$templateName.'.html.twig'; - $this->copyPreviousFile($templateFile); - $this->renderGeneratedFile( - 'default_view.html.twig', - $templateFile, - $parameters + array('view' => $templateName) - ); - } - } - foreach ($this->forms as $form) { $parameters['form'] = $form; @@ -183,6 +161,33 @@ public function generate(Bundle $bundle, $modelName) $generatorFile, $parameters ); + + if ($formsOnly) { + return; + } + + foreach ($this->actions as $action => $actionProperties) { + $parameters['action'] = $action; + + $controllerFile = $dir.'/Controller/' + .($this->prefix ? ucfirst($this->prefix).'/' : '').$action.'Controller.php'; + $this->copyPreviousFile($controllerFile); + $this->renderGeneratedFile( + 'DefaultController.php.twig', + $controllerFile, + $parameters + ); + + foreach ($actionProperties['views'] as $templateName) { + $templateFile = $dir.'/Resources/views/'.ucfirst($this->prefix).$action.'/'.$templateName.'.html.twig'; + $this->copyPreviousFile($templateFile); + $this->renderGeneratedFile( + 'default_view.html.twig', + $templateFile, + $parameters + array('view' => $templateName) + ); + } + } } /** diff --git a/Generator/DoctrineGenerator.php b/Generator/DoctrineGenerator.php index 0950194a..7d0b2112 100644 --- a/Generator/DoctrineGenerator.php +++ b/Generator/DoctrineGenerator.php @@ -49,41 +49,48 @@ protected function doBuild() ); $generator->setBaseGeneratorName($this->getBaseGeneratorName()); - $builders = $generator->getFromYaml('builders', array()); + $builders = $generator->getBuildersFromYaml(); + $formsOnly = $generator->isFormsOnly(); if (array_key_exists('list', $builders)) { - $generator->addBuilder(new ListBuilderAction()); - $generator->addBuilder(new ListBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new ListBuilderAction()); + $generator->addBuilder(new ListBuilderTemplate()); + } $generator->addBuilder(new FiltersBuilderType()); } - if (array_key_exists('nested_list', $builders)) { + if (array_key_exists('nested_list', $builders) && !$formsOnly) { $generator->addBuilder(new NestedListBuilderAction()); $generator->addBuilder(new NestedListBuilderTemplate()); } if (array_key_exists('edit', $builders)) { - $generator->addBuilder(new EditBuilderAction()); - $generator->addBuilder(new EditBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new EditBuilderAction()); + $generator->addBuilder(new EditBuilderTemplate()); + } $generator->addBuilder(new EditBuilderType()); } if (array_key_exists('new', $builders)) { - $generator->addBuilder(new NewBuilderAction()); - $generator->addBuilder(new NewBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new NewBuilderAction()); + $generator->addBuilder(new NewBuilderTemplate()); + } $generator->addBuilder(new NewBuilderType()); } - if (array_key_exists('show', $builders)) { + if (array_key_exists('show', $builders) && !$formsOnly) { $generator->addBuilder(new ShowBuilderAction()); $generator->addBuilder(new ShowBuilderTemplate()); } - if (array_key_exists('excel', $builders)) { + if (array_key_exists('excel', $builders) && !$formsOnly) { $generator->addBuilder(new ExcelBuilderAction()); } - if (array_key_exists('actions', $builders)) { + if (array_key_exists('actions', $builders) && !$formsOnly) { $generator->addBuilder(new ActionsBuilderAction()); $generator->addBuilder(new ActionsBuilderTemplate()); } diff --git a/Generator/DoctrineODMGenerator.php b/Generator/DoctrineODMGenerator.php index bba7e077..dd6e1720 100644 --- a/Generator/DoctrineODMGenerator.php +++ b/Generator/DoctrineODMGenerator.php @@ -47,36 +47,43 @@ protected function doBuild() ); $generator->setBaseGeneratorName($this->getBaseGeneratorName()); - $builders = $generator->getFromYaml('builders', array()); + $builders = $generator->getBuildersFromYaml(); + $formsOnly = $generator->isFormsOnly(); if (array_key_exists('list', $builders)) { - $generator->addBuilder(new ListBuilderAction()); - $generator->addBuilder(new ListBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new ListBuilderAction()); + $generator->addBuilder(new ListBuilderTemplate()); + } $generator->addBuilder(new FiltersBuilderType()); } if (array_key_exists('edit', $builders)) { - $generator->addBuilder(new EditBuilderAction()); - $generator->addBuilder(new EditBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new EditBuilderAction()); + $generator->addBuilder(new EditBuilderTemplate()); + } $generator->addBuilder(new EditBuilderType()); } if (array_key_exists('new', $builders)) { - $generator->addBuilder(new NewBuilderAction()); - $generator->addBuilder(new NewBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new NewBuilderAction()); + $generator->addBuilder(new NewBuilderTemplate()); + } $generator->addBuilder(new NewBuilderType()); } - if (array_key_exists('show', $builders)) { + if (array_key_exists('show', $builders) && !$formsOnly) { $generator->addBuilder(new ShowBuilderAction()); $generator->addBuilder(new ShowBuilderTemplate()); } - if (array_key_exists('excel', $builders)) { + if (array_key_exists('excel', $builders) && !$formsOnly) { $generator->addBuilder(new ExcelBuilderAction()); } - if (array_key_exists('actions', $builders)) { + if (array_key_exists('actions', $builders) && !$formsOnly) { $generator->addBuilder(new ActionsBuilderAction()); $generator->addBuilder(new ActionsBuilderTemplate()); } diff --git a/Generator/PropelGenerator.php b/Generator/PropelGenerator.php index a8899458..4678e59c 100644 --- a/Generator/PropelGenerator.php +++ b/Generator/PropelGenerator.php @@ -49,41 +49,48 @@ protected function doBuild() $generator->setColumnClass('Admingenerator\GeneratorBundle\Generator\PropelColumn'); $generator->setBaseGeneratorName($this->getBaseGeneratorName()); - $builders = $generator->getFromYaml('builders', array()); + $builders = $generator->getBuildersFromYaml(); + $formsOnly = $generator->isFormsOnly(); if (array_key_exists('list', $builders)) { - $generator->addBuilder(new ListBuilderAction()); - $generator->addBuilder(new ListBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new ListBuilderAction()); + $generator->addBuilder(new ListBuilderTemplate()); + } $generator->addBuilder(new FiltersBuilderType()); } - if (array_key_exists('nested_list', $builders)) { + if (array_key_exists('nested_list', $builders) && !$formsOnly) { $generator->addBuilder(new NestedListBuilderAction()); $generator->addBuilder(new NestedListBuilderTemplate()); } if (array_key_exists('edit', $builders)) { - $generator->addBuilder(new EditBuilderAction()); - $generator->addBuilder(new EditBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new EditBuilderAction()); + $generator->addBuilder(new EditBuilderTemplate()); + } $generator->addBuilder(new EditBuilderType()); } if (array_key_exists('new', $builders)) { - $generator->addBuilder(new NewBuilderAction()); - $generator->addBuilder(new NewBuilderTemplate()); + if (!$formsOnly) { + $generator->addBuilder(new NewBuilderAction()); + $generator->addBuilder(new NewBuilderTemplate()); + } $generator->addBuilder(new NewBuilderType()); } - if (array_key_exists('show', $builders)) { + if (array_key_exists('show', $builders) && !$formsOnly) { $generator->addBuilder(new ShowBuilderAction()); $generator->addBuilder(new ShowBuilderTemplate()); } - if (array_key_exists('excel', $builders)) { + if (array_key_exists('excel', $builders) && $formsOnly) { $generator->addBuilder(new ExcelBuilderAction()); } - if (array_key_exists('actions', $builders)) { + if (array_key_exists('actions', $builders) && !$formsOnly) { $generator->addBuilder(new ActionsBuilderAction()); $generator->addBuilder(new ActionsBuilderTemplate()); } diff --git a/Resources/skeleton/bundle/generator.yml.twig b/Resources/skeleton/bundle/generator.yml.twig index 09079b05..2264ece7 100644 --- a/Resources/skeleton/bundle/generator.yml.twig +++ b/Resources/skeleton/bundle/generator.yml.twig @@ -4,6 +4,7 @@ params: namespace_prefix: {{ namespace_prefix }} concurrency_lock: ~ bundle_name: {{ bundle_name }} + forms_only: {{ forms_only ? 1 : 0 }} pk_requirement: ~ fields: ~ object_actions: @@ -13,6 +14,7 @@ params: builders: list: params: + {% if not forms_only -%} title: List for {{ bundle_name }} display: ~ actions: @@ -20,24 +22,32 @@ builders: object_actions: edit: ~ delete: ~ + {% endif %} + {% if not forms_only %} excel: params: ~ filename: ~ filetype: ~ + {% endif %} new: params: + {% if not forms_only -%} title: New object for {{ bundle_name }} display: ~ actions: save: ~ list: ~ + {% endif %} edit: params: + {% if not forms_only -%} title: "You're editing the object \"%object%\"|{ %object%: {{ model_name }}.title }|" display: ~ actions: save: ~ list: ~ + {% endif %} + {% if not forms_only -%} show: params: title: "You're viewing the object \"%object%\"|{ %object%: {{ model_name }}.title }|" @@ -51,3 +61,4 @@ builders: delete: ~ batch_actions: delete: ~ + {% endif %} \ No newline at end of file