Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
srv
/
data
/
web
/
vhosts
/
www.humitest.fr
/
htdocs
/
src
/
Maker
/
/srv/data/web/vhosts/www.humitest.fr/htdocs/src/Maker/MakeCrud.php
<?php namespace App\Maker; use Doctrine\Bundle\DoctrineBundle\DoctrineBundle; use Doctrine\Common\Inflector\Inflector; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\MakerBundle\ConsoleStyle; use Symfony\Bundle\MakerBundle\DependencyBuilder; use Symfony\Bundle\MakerBundle\Doctrine\DoctrineHelper; use Symfony\Bundle\MakerBundle\Generator; use Symfony\Bundle\MakerBundle\InputConfiguration; use Symfony\Bundle\MakerBundle\Str; use Symfony\Bundle\MakerBundle\Validator; use Symfony\Bundle\TwigBundle\TwigBundle; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Question\Question; use Symfony\Component\Form\AbstractType; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Csrf\CsrfTokenManager; use Symfony\Component\Validator\Validation; use Symfony\Bundle\MakerBundle\Maker\AbstractMaker; /** * @author Sadicov Vladimir <sadikoff@gmail.com> */ final class MakeCrud extends AbstractMaker { private $doctrineHelper; public function __construct(DoctrineHelper $doctrineHelper) { $this->doctrineHelper = $doctrineHelper; } public static function getCommandName(): string { return 'make:mycrud'; } /** * {@inheritdoc} */ public function configureCommand(Command $command, InputConfiguration $inputConfig) { $command ->setDescription('Creates CRUD for Doctrine entity class') ->addArgument('entity-class', InputArgument::OPTIONAL, sprintf('The class name of the entity to create CRUD (e.g. <fg=yellow>%s</>)', Str::asClassName(Str::getRandomTerm()))) ->setHelp(file_get_contents(__DIR__.'/../Resources/help/MakeCrud.txt')) ; $inputConfig->setArgumentAsNonInteractive('entity-class'); } public function interact(InputInterface $input, ConsoleStyle $io, Command $command) { if (null === $input->getArgument('entity-class')) { $argument = $command->getDefinition()->getArgument('entity-class'); $entities = $this->doctrineHelper->getEntitiesForAutocomplete(); $question = new Question($argument->getDescription()); $question->setAutocompleterValues($entities); $value = $io->askQuestion($question); $input->setArgument('entity-class', $value); } } public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator) { $entityClassDetails = $generator->createClassNameDetails( Validator::entityExists($input->getArgument('entity-class'), $this->doctrineHelper->getEntitiesForAutocomplete()), 'Entity\\' ); $entityDoctrineDetails = $this->doctrineHelper->createDoctrineDetails($entityClassDetails->getFullName()); $repositoryVars = []; if (null !== $entityDoctrineDetails->getRepositoryClass()) { $repositoryClassDetails = $generator->createClassNameDetails( '\\'.$entityDoctrineDetails->getRepositoryClass(), 'Repository\\', 'Repository' ); $repositoryVars = [ 'repository_full_class_name' => $repositoryClassDetails->getFullName(), 'repository_class_name' => $repositoryClassDetails->getShortName(), 'repository_var' => lcfirst(Inflector::singularize($repositoryClassDetails->getShortName())), ]; } $controllerClassDetails = $generator->createClassNameDetails( $entityClassDetails->getRelativeNameWithoutSuffix(), 'Controller\\back\\', 'Controller' ); $iter = 0; do { $formClassDetails = $generator->createClassNameDetails( $entityClassDetails->getRelativeNameWithoutSuffix().($iter ?: ''), 'Form\\', 'Type' ); ++$iter; } while (class_exists($formClassDetails->getFullName())); $entityVarPlural = lcfirst(Inflector::pluralize($entityClassDetails->getShortName())); $entityVarSingular = lcfirst(Inflector::singularize($entityClassDetails->getShortName())); $entityTwigVarPlural = Str::asTwigVariable($entityVarPlural); $entityTwigVarSingular = Str::asTwigVariable($entityVarSingular); $routeName = 'admin_'.Str::asRouteName($controllerClassDetails->getRelativeNameWithoutSuffix()); $templatesPath = Str::asFilePath($controllerClassDetails->getRelativeNameWithoutSuffix()); $generator->generateController( $controllerClassDetails->getFullName(), __DIR__.'/../Resources/skeleton/crud/controller/Controller.tpl.php', array_merge([ 'entity_full_class_name' => $entityClassDetails->getFullName(), 'entity_class_name' => $entityClassDetails->getShortName(), 'form_full_class_name' => $formClassDetails->getFullName(), 'form_class_name' => $formClassDetails->getShortName(), 'route_path' => Str::asRoutePath($controllerClassDetails->getRelativeNameWithoutSuffix()), 'route_name' => $routeName, 'templates_path' => $templatesPath, 'entity_var_plural' => $entityVarPlural, 'entity_twig_var_plural' => $entityTwigVarPlural, 'entity_var_singular' => $entityVarSingular, 'entity_twig_var_singular' => $entityTwigVarSingular, 'entity_identifier' => $entityDoctrineDetails->getIdentifier(), ], $repositoryVars ) ); $generator->generateClass( $formClassDetails->getFullName(), __DIR__.'/../Resources/skeleton/form/Type.tpl.php', [ 'bounded_full_class_name' => $entityClassDetails->getFullName(), 'bounded_class_name' => $entityClassDetails->getShortName(), 'form_fields' => $entityDoctrineDetails->getFormFields(), ] ); $templates = [ // 'delete' => [ // 'twig_namespace' => 'back', // 'entity_class_name' => $entityClassDetails->getShortName(), // 'entity_twig_var_singular' => $entityTwigVarSingular, // 'entity_identifier' => $entityDoctrineDetails->getIdentifier(), // 'route_name' => $routeName, // ], 'update' => [ 'twig_namespace' => 'back', 'entity_class_name' => $entityClassDetails->getShortName(), 'entity_twig_var_singular' => $entityTwigVarSingular, 'entity_identifier' => $entityDoctrineDetails->getIdentifier(), 'entity_fields' => $entityDoctrineDetails->getDisplayFields(), 'route_name' => $routeName, ], 'search' => [ 'twig_namespace' => 'back', 'entity_class_name' => $entityClassDetails->getShortName(), 'entity_twig_var_plural' => $entityTwigVarPlural, 'entity_twig_var_singular' => $entityTwigVarSingular, 'entity_identifier' => $entityDoctrineDetails->getIdentifier(), 'entity_fields' => $entityDoctrineDetails->getDisplayFields(), 'route_name' => $routeName, ], 'create' => [ 'twig_namespace' => 'back', 'entity_twig_var_singular' => $entityTwigVarSingular, 'entity_class_name' => $entityClassDetails->getShortName(), 'entity_identifier' => $entityDoctrineDetails->getIdentifier(), 'entity_fields' => $entityDoctrineDetails->getDisplayFields(), 'route_name' => $routeName, ], 'read' => [ 'twig_namespace' => 'back', 'entity_class_name' => $entityClassDetails->getShortName(), 'entity_twig_var_singular' => $entityTwigVarSingular, 'entity_identifier' => $entityDoctrineDetails->getIdentifier(), 'entity_fields' => $entityDoctrineDetails->getDisplayFields(), 'route_name' => $routeName, ], ]; foreach ($templates as $template => $variables) { $generator->generateFile( 'templates/'.$variables['twig_namespace'].'/'.$templatesPath.'/'.$template.'.html.twig', __DIR__.'/../Resources/skeleton/crud/templates/'.$template.'.tpl.php', $variables ); } $generator->writeChanges(); $this->writeSuccessMessage($io); $io->text(sprintf('Next: Check your new CRUD by going to <fg=yellow>%s/</>', Str::asRoutePath($controllerClassDetails->getRelativeNameWithoutSuffix()))); } /** * {@inheritdoc} */ public function configureDependencies(DependencyBuilder $dependencies) { $dependencies->addClassDependency( Route::class, 'router' ); $dependencies->addClassDependency( AbstractType::class, 'form' ); $dependencies->addClassDependency( Validation::class, 'validator' ); $dependencies->addClassDependency( TwigBundle::class, 'twig-bundle' ); $dependencies->addClassDependency( DoctrineBundle::class, 'orm-pack' ); $dependencies->addClassDependency( CsrfTokenManager::class, 'security-csrf' ); $dependencies->addClassDependency( ParamConverter::class, 'annotations' ); } }