-
Notifications
You must be signed in to change notification settings - Fork 10
/
GenerateEntitiesDoctrineOXMCommand.php
70 lines (56 loc) · 2.96 KB
/
GenerateEntitiesDoctrineOXMCommand.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
namespace Doctrine\Bundle\OXMBundle\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Output\Output;
/**
* Generate xml-entity classes from mapping information
*
* @author Igor Golovanov <igor.golovanov@gmail.com>
*/
class GenerateEntitiesDoctrineOXMCommand extends DoctrineOXMCommand
{
protected function configure()
{
$this
->setName('doctrine:oxm:generate:xml-entities')
->setDescription('Generate xml-entity classes and method stubs from your mapping information.')
->addArgument('bundle', InputArgument::REQUIRED, 'The bundle to initialize the xml-entity or xml-entities in.')
->addOption('xml-entity', null, InputOption::VALUE_OPTIONAL, 'The xml-entity class to initialize (shortname without namespace).')
->setHelp(<<<EOT
The <info>doctrine:oxm:generate:xml-entities</info> command generates xml-entity classes and method stubs from your mapping information:
You have to limit generation of xml-entities to an individual bundle:
<info>./app/console doctrine:oxm:generate:xml-entities MyCustomBundle</info>
Alternatively, you can limit generation to a single xml-entity within a bundle:
<info>./app/console doctrine:oxm:generate:xml-entities "MyCustomBundle" --xml-entity="User"</info>
You have to specify the shortname (without namespace) of the xml-entity you want to filter for.
EOT
);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$bundleName = $input->getArgument('bundle');
$filterXmlEntity = $input->getOption('xml-entity');
$foundBundle = $this->findBundle($bundleName);
if ($metadatas = $this->getBundleMetadatas($foundBundle)) {
$output->writeln(sprintf('Generating xml-entities for "<info>%s</info>"', $foundBundle->getName()));
$xmlEntityGenerator = $this->getXmlEntityGenerator();
foreach ($metadatas as $metadata) {
if ($filterXmlEntity && $metadata->reflClass->getShortName() != $filterXmlEntity) {
continue;
}
if (strpos($metadata->name, $foundBundle->getNamespace()) === false) {
throw new \RuntimeException(
"XmlEntity " . $metadata->name . " and bundle don't have a common namespace, ".
"generation failed because the target directory cannot be detected.");
}
$output->writeln(sprintf(' > generating <comment>%s</comment>', $metadata->name));
$xmlEntityGenerator->generate(array($metadata), $this->findBasePathForBundle($foundBundle));
}
} else {
throw new \RuntimeException("Bundle " . $bundleName . " does not contain any mapped xml-entities.");
}
}
}