diff --git a/core/Maker/MakeCrudController.php b/core/Maker/MakeCrudController.php index 976f73d..a90e7c1 100644 --- a/core/Maker/MakeCrudController.php +++ b/core/Maker/MakeCrudController.php @@ -31,27 +31,27 @@ class MakeCrudController extends AbstractMaker ->addArgument( 'controller-class', InputArgument::OPTIONAL, - 'Choose a name for your CRUD controller class (e.g. FooAdminController)' + 'Choose a name for your CRUD controller class (e.g. MyEntityAdminController)' ) ->addArgument( 'entity-class', InputArgument::OPTIONAL, - 'Define the entity (e.g. App\Entity\Foo)' + 'Define the entity (e.g. MyEntity)' ) ->addArgument( 'repository-query-class', InputArgument::OPTIONAL, - 'Define the repository query (e.g. App\Repository\FooRepositoryQuery)' + 'Define the repository query (e.g. MyEntityRepositoryQuery)' ) ->addArgument( 'factory-class', InputArgument::OPTIONAL, - 'Define the factory (e.g. App\Factory\FooFactory)' + 'Define the factory (e.g. MyEntityFactory)' ) ->addArgument( 'form-class', InputArgument::OPTIONAL, - 'Define the form (e.g. App\Form\FooType)' + 'Define the form (e.g. MyEntityType)' ) ->setHelp('') ; @@ -65,21 +65,41 @@ class MakeCrudController extends AbstractMaker 'Controller' ); - $entity = u($input->getArgument('entity-class')); - $lastBackSlashIndex = $entity->indexOfLast('\\'); - $route = u($entity->slice($lastBackSlashIndex))->snake(); + $entityDetails = $generator->createClassNameDetails( + $input->getArgument('entity-class'), + 'Entity\\', + '' + ); + + $repoDetails = $generator->createClassNameDetails( + $input->getArgument('repository-query-class'), + 'Repository\\', + '' + ); + + $formDetails = $generator->createClassNameDetails( + $input->getArgument('form-class'), + 'Type\\', + '' + ); + + $factoryDetails = $generator->createClassNameDetails( + $input->getArgument('factory-class'), + 'Factory\\', + '' + ); $options = [ - 'entity' => (string) $entity, - 'route' => (string) $route, - 'repository_query' => $input->getArgument('repository-query-class'), - 'form' => $input->getArgument('form-class'), - 'factory' => $input->getArgument('factory-class'), + '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/crud-controller/CrudController.tpl.php', + __DIR__.'/../Resources/maker/controller/CrudController.tpl.php', $options ); diff --git a/core/Maker/MakeEntityFactory.php b/core/Maker/MakeEntityFactory.php new file mode 100644 index 0000000..f51a44c --- /dev/null +++ b/core/Maker/MakeEntityFactory.php @@ -0,0 +1,82 @@ +addArgument( + 'entity-class', + InputArgument::OPTIONAL, + 'Define the entity (e.g. MyEntity)' + ) + ->addArgument( + 'factory-class', + InputArgument::OPTIONAL, + 'Choose a name for your factory (e.g. MyEntityFactory)' + ) + ->setHelp('') + ; + } + + public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator) + { + $entityDetails = $generator->createClassNameDetails( + $input->getArgument('entity-class'), + 'Entity\\', + '' + ); + + $factoryDetails = $generator->createClassNameDetails( + $input->getArgument('factory-class'), + 'Factory\\', + '' + ); + + $options = [ + 'entity' => $entityDetails->getFullName(), + ]; + + $factoryPath = $generator->generateController( + $factoryDetails->getFullName(), + __DIR__.'/../Resources/maker/entity/EntityFactory.tpl.php', + $options + ); + + $generator->writeChanges(); + + $this->writeSuccessMessage($io); + $io->text('Next: Open your new factory class and configure it!'); + } + + public function configureDependencies(DependencyBuilder $dependencies) + { + $dependencies->addClassDependency( + Annotation::class, + 'doctrine/annotations' + ); + } +} diff --git a/core/Maker/MakeRepositoryQuery.php b/core/Maker/MakeRepositoryQuery.php new file mode 100644 index 0000000..9986e94 --- /dev/null +++ b/core/Maker/MakeRepositoryQuery.php @@ -0,0 +1,85 @@ +addArgument( + 'repository-class', + InputArgument::OPTIONAL, + 'Define the repository (e.g. MyEntityRepository)' + ) + ->setHelp('') + ; + } + + public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator) + { + $repositoryClass = $input->getArgument('repository-class'); + + $repositoryDetails = $generator->createClassNameDetails( + $repositoryClass, + 'Repository\\', + '' + ); + + $queryDetails = $generator->createClassNameDetails( + $repositoryClass, + 'Repository\\', + 'Query' + ); + + $id = u($queryDetails->getShortName()) + ->truncate(1) + ->lower() + ; + + $options = [ + 'repository' => $repositoryDetails->getFullName(), + 'id' => $id, + ]; + + $factoryPath = $generator->generateController( + $queryDetails->getFullName(), + __DIR__.'/../Resources/maker/repository/RepositoryQuery.tpl.php', + $options + ); + + $generator->writeChanges(); + + $this->writeSuccessMessage($io); + $io->text('Next: Open your new repository query class and configure it!'); + } + + public function configureDependencies(DependencyBuilder $dependencies) + { + $dependencies->addClassDependency( + Annotation::class, + 'doctrine/annotations' + ); + } +} diff --git a/core/Resources/maker/crud-controller/CrudController.tpl.php b/core/Resources/maker/controller/CrudController.tpl.php similarity index 100% rename from core/Resources/maker/crud-controller/CrudController.tpl.php rename to core/Resources/maker/controller/CrudController.tpl.php diff --git a/core/Resources/maker/entity/EntityFactory.tpl.php b/core/Resources/maker/entity/EntityFactory.tpl.php new file mode 100644 index 0000000..3545fbd --- /dev/null +++ b/core/Resources/maker/entity/EntityFactory.tpl.php @@ -0,0 +1,14 @@ + + +namespace ; + +use App\Core\Factory\FactoryInterface; +use as Entity; + +class implements FactoryInterface +{ + public function create(): Entity + { + return new Entity(); + } +} diff --git a/core/Resources/maker/repository/RepositoryQuery.tpl.php b/core/Resources/maker/repository/RepositoryQuery.tpl.php new file mode 100644 index 0000000..bec52b1 --- /dev/null +++ b/core/Resources/maker/repository/RepositoryQuery.tpl.php @@ -0,0 +1,15 @@ + + +namespace ; + +use App\Core\Repository\RepositoryQuery; +use Knp\Component\Pager\PaginatorInterface; +use as Repository; + +class extends RepositoryQuery +{ + public function __construct(Repository $repository, PaginatorInterface $paginator) + { + parent::__construct($repository, '', $paginator); + } +} diff --git a/core/Resources/views/admin/crud/index.html.twig b/core/Resources/views/admin/crud/index.html.twig index 74bcd38..84684f1 100644 --- a/core/Resources/views/admin/crud/index.html.twig +++ b/core/Resources/views/admin/crud/index.html.twig @@ -248,14 +248,14 @@ {% block list_footer_before %}{% endblock %} {% if isSortable %} -
+
{{ 'You can sort items with drag & drop'|trans }}
{% endif %} {% if configuration.hasBatchAction(context) %} -
+