Skip to content

Commit b3bc10f

Browse files
committed
test
1 parent 179d250 commit b3bc10f

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

src/SchemaOrgModel/TypesGenerator.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ public function generate($config)
265265
if ($isArray) {
266266
$class['hasConstructor'] = true;
267267

268-
if ($config['useDoctrineCollection'] && !in_array(self::DOCTRINE_COLLECTION_USE, $class['uses'])) {
268+
if ($config['doctrine']['useDoctrineCollection'] && !in_array(self::DOCTRINE_COLLECTION_USE, $class['uses'])) {
269269
$class['uses'][] = self::DOCTRINE_COLLECTION_USE;
270270
}
271271
}
@@ -314,6 +314,10 @@ public function generate($config)
314314
$annotationGenerators[] = $generator;
315315
}
316316

317+
if (isset($class['interfaceNamespace']) && $config['doctrine']['resolveTargetEntityConfigPath']) {
318+
$interfaceMappings = [];
319+
}
320+
317321
$generatedFiles = [];
318322
foreach ($classes as $className => &$class) {
319323
$class['uses'] = $this->generateClassUses($annotationGenerators, $classes, $className);
@@ -380,7 +384,23 @@ public function generate($config)
380384
'class' => $class,
381385
])
382386
);
387+
388+
if ($config['doctrine']['resolveTargetEntityConfigPath']) {
389+
$interfaceMappings[$class['interfaceNamespace'].'\\'.$class['interfaceName']] = $class['namespace'].'\\'.$className;
390+
}
391+
}
392+
}
393+
394+
if (isset($interfaceMappings) && $config['doctrine']['resolveTargetEntityConfigPath']) {
395+
$dir = dirname($config['doctrine']['resolveTargetEntityConfigPath']);
396+
if (!file_exists($dir)) {
397+
mkdir($dir, 0777, true);
383398
}
399+
400+
file_put_contents(
401+
$config['doctrine']['resolveTargetEntityConfigPath'],
402+
$this->twig->render('doctrine.xml.twig', ['mappings' => $interfaceMappings])
403+
);
384404
}
385405

386406
$this->fixCs($generatedFiles);

src/SchemaOrgModel/TypesGeneratorConfiguration.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public function getConfigTreeBuilder()
4848
->booleanNode('debug')->defaultFalse()->info('Debug mode')->end()
4949
->booleanNode('generateId')->defaultTrue()->info('Automatically add an id field to entities')->end()
5050
->booleanNode('useInterface')->defaultFalse()->info('Generate interfaces and use Doctrine\'s Resolve Target Entity feature')->end()
51-
->booleanNode('useDoctrineCollection')->defaultTrue()->info('Use Doctrine\'s ArrayCollection instead of standard arrays')->end()
5251
->booleanNode('checkIsGoodRelations')->defaultFalse()->info('Emit a warning if a property is not derived from GoodRelations')->end()
5352
->scalarNode('header')->defaultFalse()->info('A license or any text to use as header of generated files')->example('// (c) Kévin Dunglas <[email protected]>')->end()
5453
->arrayNode('namespaces')
@@ -60,6 +59,14 @@ public function getConfigTreeBuilder()
6059
->scalarNode('interface')->defaultValue('SchemaOrg\Model')->info('The namespace of the generated interfaces')->example('Acme\Model')->end()
6160
->end()
6261
->end()
62+
->arrayNode('doctrine')
63+
->addDefaultsIfNotSet()
64+
->info('Doctrine')
65+
->children()
66+
->booleanNode('useCollection')->defaultTrue()->info('Use Doctrine\'s ArrayCollection instead of standard arrays')->end()
67+
->scalarNode('resolveTargetEntityConfigPath')->defaultNull()->info('The Resolve Target Entity Listener config file pass')->end()
68+
->end()
69+
->end()
6370
->scalarNode('author')->defaultFalse()->info('The value of the phpDoc\'s @author annotation')->example('Kévin Dunglas <[email protected]>')->end()
6471
->enumNode('fieldVisibility')->values(['private', 'protected', 'public'])->defaultValue('private')->cannotBeEmpty()->info('Visibility of entities fields')->end()
6572
->arrayNode('types')

templates/class.php.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use {{ use }};
3939
{{ config.fieldVisibility }} ${{ field.name }}{% if field.isArray and (field.isEnum or not field.typeHint or not config.useDoctrineCollection) %} = []{% endif %};
4040
{% endfor %}
4141
42-
{% if config.useDoctrineCollection and class.hasConstructor %}
42+
{% if config.doctrine.useDoctrineCollection and class.hasConstructor %}
4343
public function __construct()
4444
{
4545
parent::__construct();

0 commit comments

Comments
 (0)