addArgument( 'controller-class', InputArgument::OPTIONAL, 'Choose a name for your CRUD controller class (e.g. MyEntityAdminController)' ) ->addArgument( 'entity-class', InputArgument::OPTIONAL, 'Define the entity (e.g. MyEntity)' ) ->addArgument( 'repository-query-class', InputArgument::OPTIONAL, 'Define the repository query (e.g. MyEntityRepositoryQuery)' ) ->addArgument( 'factory-class', InputArgument::OPTIONAL, 'Define the factory (e.g. MyEntityFactory)' ) ->addArgument( 'form-class', InputArgument::OPTIONAL, 'Define the form (e.g. MyEntityType)' ) ->setHelp('') ; } public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator) { $controllerClassNameDetails = $generator->createClassNameDetails( $input->getArgument('controller-class'), 'Controller\\', 'Controller' ); $entityDetails = $generator->createClassNameDetails( $input->getArgument('entity-class'), 'Entity\\', '' ); $repoDetails = $generator->createClassNameDetails( $input->getArgument('repository-query-class'), 'Repository\\', '' ); $formDetails = $generator->createClassNameDetails( $input->getArgument('form-class'), 'Form\\', '' ); $factoryDetails = $generator->createClassNameDetails( $input->getArgument('factory-class'), 'Factory\\', '' ); $options = [ 'entity' => $entityDetails->getFullName(), 'route' => (string) u($entityDetails->getShortName())->snake(), 'repository_query' => $repoDetails->getFullName(), 'form' => $formDetails->getFullName(), 'factory' => $factoryDetails->getFullName(), ]; $controllerPath = $generator->generateController( $controllerClassNameDetails->getFullName(), __DIR__.'/../Resources/maker/controller/CrudController.tpl.php', $options ); $views = ['_form.html.twig', '_show.html.twig']; $directory = sprintf('templates/admin/%s_admin/', $options['route']); $filesystem = new Filesystem(); $filesystem->mkdir($directory); foreach ($views as $view) { $filesystem->dumpFile( $directory.$view, sprintf("{{ include('@Core/admin/crud/%s') }}\n", $view) ); } $generator->writeChanges(); $this->writeSuccessMessage($io); $io->text('Next: Open your new controller class and configure it!'); } public function configureDependencies(DependencyBuilder $dependencies) { $dependencies->addClassDependency( Annotation::class, 'doctrine/annotations' ); } }