diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php
index c06526748..c26149b53 100644
--- a/src/DependencyInjection/Configuration.php
+++ b/src/DependencyInjection/Configuration.php
@@ -27,6 +27,7 @@ public function getConfigTreeBuilder()
$rootNode
->children()
->scalarNode('root_namespace')->defaultValue('App')->end()
+ ->scalarNode('root_entity_directory')->defaultValue('src/Entity/')->end()
->end()
;
diff --git a/src/DependencyInjection/MakerExtension.php b/src/DependencyInjection/MakerExtension.php
index 575408fa1..12eacdd86 100644
--- a/src/DependencyInjection/MakerExtension.php
+++ b/src/DependencyInjection/MakerExtension.php
@@ -37,6 +37,11 @@ public function load(array $configs, ContainerBuilder $container)
$configuration = $this->getConfiguration($configs, $container);
$config = $this->processConfiguration($configuration, $configs);
+ $rootEntityDirectory = trim($config['root_entity_directory']);
+
+ $makeEntityCommandDefinition = $container->getDefinition('maker.maker.make_entity');
+ $makeEntityCommandDefinition->replaceArgument(3, $rootEntityDirectory);
+
$rootNamespace = trim($config['root_namespace'], '\\');
$makeCommandDefinition = $container->getDefinition('maker.generator');
diff --git a/src/Maker/MakeEntity.php b/src/Maker/MakeEntity.php
index 47d426fc4..1c74a16d7 100644
--- a/src/Maker/MakeEntity.php
+++ b/src/Maker/MakeEntity.php
@@ -47,11 +47,13 @@ final class MakeEntity extends AbstractMaker implements InputAwareMakerInterface
private $fileManager;
private $doctrineHelper;
private $generator;
+ private $rootEntityDirectory;
- public function __construct(FileManager $fileManager, DoctrineHelper $doctrineHelper, string $projectDirectory, Generator $generator = null)
+ public function __construct(FileManager $fileManager, DoctrineHelper $doctrineHelper, string $projectDirectory, string $rootEntityDirectory, Generator $generator = null)
{
$this->fileManager = $fileManager;
$this->doctrineHelper = $doctrineHelper;
+ $this->rootEntityDirectory = $rootEntityDirectory;
// $projectDirectory is unused, argument kept for BC
if (null === $generator) {
@@ -75,6 +77,7 @@ public function configureCommand(Command $command, InputConfiguration $inputConf
->addOption('api-resource', 'a', InputOption::VALUE_NONE, 'Mark this class as an API Platform resource (expose a CRUD API for it)')
->addOption('regenerate', null, InputOption::VALUE_NONE, 'Instead of adding new fields, simply generate the methods (e.g. getter/setter) for existing fields')
->addOption('overwrite', null, InputOption::VALUE_NONE, 'Overwrite any existing getter/setter methods')
+ ->addOption('rootdir', null, InputOption::VALUE_OPTIONAL, 'Allow you to define a custom root directory, instead of the one by default. Can also be configured with "root_entity_directory" from the bundle conf', $this->rootEntityDirectory)
->setHelp(file_get_contents(__DIR__.'/../Resources/help/MakeEntity.txt'))
;
@@ -99,7 +102,7 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma
return;
}
- $entityFinder = $this->fileManager->createFinder('src/Entity/')
+ $entityFinder = $this->fileManager->createFinder($input->getOption('rootdir'))
// remove if/when we allow entities in subdirectories
->depth('<1')
->name('*.php');
@@ -114,7 +117,7 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma
}
$argument = $command->getDefinition()->getArgument('name');
- $question = $this->createEntityClassQuestion($argument->getDescription());
+ $question = $this->createEntityClassQuestion($argument->getDescription(), $input);
$value = $io->askQuestion($question);
$input->setArgument('name', $value);
@@ -182,7 +185,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
$isFirstField = true;
while (true) {
- $newField = $this->askForNextField($io, $currentFields, $entityClassDetails->getFullName(), $isFirstField);
+ $newField = $this->askForNextField($input, $io, $currentFields, $entityClassDetails->getFullName(), $isFirstField);
$isFirstField = false;
if (null === $newField) {
@@ -284,7 +287,7 @@ public function configureDependencies(DependencyBuilder $dependencies, InputInte
ORMDependencyBuilder::buildDependencies($dependencies);
}
- private function askForNextField(ConsoleStyle $io, array $fields, string $entityClass, bool $isFirstField)
+ private function askForNextField(InputInterface $input, ConsoleStyle $io, array $fields, string $entityClass, bool $isFirstField)
{
$io->writeln('');
@@ -352,7 +355,7 @@ private function askForNextField(ConsoleStyle $io, array $fields, string $entity
}
if ('relation' === $type || \in_array($type, EntityRelation::getValidRelationTypes())) {
- return $this->askRelationDetails($io, $entityClass, $type, $fieldName);
+ return $this->askRelationDetails($input, $io, $entityClass, $type, $fieldName);
}
// this is a normal field
@@ -453,9 +456,9 @@ private function printAvailableTypes(ConsoleStyle $io)
$printSection($allTypes);
}
- private function createEntityClassQuestion(string $questionText): Question
+ private function createEntityClassQuestion(string $questionText, InputInterface $input): Question
{
- $entityFinder = $this->fileManager->createFinder('src/Entity/')
+ $entityFinder = $this->fileManager->createFinder($input->getOption('rootdir'))
// remove if/when we allow entities in subdirectories
->depth('<1')
->name('*.php');
@@ -476,12 +479,12 @@ private function createEntityClassQuestion(string $questionText): Question
return $question;
}
- private function askRelationDetails(ConsoleStyle $io, string $generatedEntityClass, string $type, string $newFieldName)
+ private function askRelationDetails(InputInterface $input, ConsoleStyle $io, string $generatedEntityClass, string $type, string $newFieldName)
{
// ask the targetEntity
$targetEntityClass = null;
while (null === $targetEntityClass) {
- $question = $this->createEntityClassQuestion('What class should this entity be related to?');
+ $question = $this->createEntityClassQuestion('What class should this entity be related to?', $input);
$targetEntityClass = $io->askQuestion($question);
diff --git a/src/Resources/config/makers.xml b/src/Resources/config/makers.xml
index 9994bb5f9..05193fb90 100644
--- a/src/Resources/config/makers.xml
+++ b/src/Resources/config/makers.xml
@@ -29,6 +29,7 @@
%kernel.project_dir%
+