1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Kunstmaan\GeneratorBundle\Command; |
4
|
|
|
|
5
|
|
|
use Kunstmaan\GeneratorBundle\Generator\SearchPageGenerator; |
6
|
|
|
use Kunstmaan\GeneratorBundle\Helper\GeneratorUtils; |
7
|
|
|
use Kunstmaan\GeneratorBundle\Helper\Sf4AppBundle; |
8
|
|
|
use Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineCommand; |
9
|
|
|
use Sensio\Bundle\GeneratorBundle\Command\Validators; |
10
|
|
|
use Symfony\Component\Console\Input\InputInterface; |
11
|
|
|
use Symfony\Component\Console\Input\InputOption; |
12
|
|
|
use Symfony\Component\Console\Output\OutputInterface; |
13
|
|
|
use Symfony\Component\HttpKernel\Kernel; |
14
|
|
|
|
15
|
|
|
/** |
16
|
|
|
* Generates a SearchPage based on the KunstmaanNodeSearchBundle |
17
|
|
|
*/ |
18
|
|
|
class GenerateSearchPageCommand extends GenerateDoctrineCommand |
19
|
|
|
{ |
20
|
|
|
/** |
21
|
|
|
* @see Command |
22
|
|
|
*/ |
23
|
|
View Code Duplication |
protected function configure() |
|
|
|
|
24
|
|
|
{ |
25
|
|
|
$this |
26
|
|
|
->setDefinition( |
27
|
|
|
array( |
28
|
|
|
new InputOption('namespace', '', InputOption::VALUE_REQUIRED, 'The namespace to generate the SearchPage in. This option is deprecated when using this bundle with symfony 4.'), |
29
|
|
|
new InputOption('prefix', '', InputOption::VALUE_OPTIONAL, 'The prefix to be used in the table names of the generated entities'), |
30
|
|
|
new InputOption('createpage', null, InputOption::VALUE_NONE, 'If set, the task will generate data fixtures to populate your database with a search page'), |
31
|
|
|
) |
32
|
|
|
) |
33
|
|
|
->setDescription('Generates a SearchPage based on KunstmaanNodeSearchBundle') |
34
|
|
|
->setHelp(<<<'EOT' |
35
|
|
|
The <info>kuma:generate:searchpage</info> command generates a SearchPage using the KunstmaanNodeSearchBundle and KunstmaanSearchBundle |
36
|
|
|
|
37
|
|
|
<info>php bin/console kuma:generate:searchpage --namespace=Namespace/NamedBundle</info> |
38
|
|
|
|
39
|
|
|
Use the <info>--prefix</info> option to add a prefix to the table names of the generated entities |
40
|
|
|
|
41
|
|
|
<info>php bin/console kuma:generate:searchpage --namespace=Namespace/NamedBundle --prefix=demo_</info> |
42
|
|
|
|
43
|
|
|
Add the <info>--createpage</info> option to create data fixtures to populate your database with a search page |
44
|
|
|
|
45
|
|
|
<info>php bin/console kuma:generate:article --namespace=Namespace/NamedBundle --createpage</info> |
46
|
|
|
EOT |
47
|
|
|
) |
48
|
|
|
->setName('kuma:generate:searchpage'); |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
/** |
52
|
|
|
* Executes the command. |
53
|
|
|
* |
54
|
|
|
* @param InputInterface $input An InputInterface instance |
55
|
|
|
* @param OutputInterface $output An OutputInterface instance |
56
|
|
|
*/ |
57
|
|
|
protected function execute(InputInterface $input, OutputInterface $output) |
58
|
|
|
{ |
59
|
|
|
$questionHelper = $this->getQuestionHelper(); |
60
|
|
|
$questionHelper->writeSection($output, 'Search Page Generation'); |
61
|
|
|
|
62
|
|
|
$prefix = $input->getOption('prefix'); |
63
|
|
|
$createPage = $input->getOption('createpage'); |
64
|
|
|
if (Kernel::VERSION_ID < 40000) { |
65
|
|
|
GeneratorUtils::ensureOptionsProvided($input, ['namespace']); |
66
|
|
|
|
67
|
|
|
$namespace = Validators::validateBundleNamespace($input->getOption('namespace')); |
68
|
|
|
$bundle = strtr($namespace, ['\\' => '']); |
69
|
|
|
|
70
|
|
|
$bundle = $this |
|
|
|
|
71
|
|
|
->getApplication() |
72
|
|
|
->getKernel() |
73
|
|
|
->getBundle($bundle); |
74
|
|
|
} else { |
75
|
|
|
$bundle = new Sf4AppBundle($this->getContainer()->getParameter('kernel.project_dir')); |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
$rootDir = $this->getApplication()->getKernel()->getRootDir(); |
|
|
|
|
79
|
|
|
|
80
|
|
|
$generator = $this->getGenerator($this->getApplication()->getKernel()->getBundle('KunstmaanGeneratorBundle')); |
|
|
|
|
81
|
|
|
$generator->generate($bundle, $prefix, $rootDir, $createPage, $output); |
82
|
|
|
|
83
|
|
|
$output->writeln(array( |
|
|
|
|
84
|
|
|
'Make sure you update your database first before you test the pagepart:', |
85
|
|
|
' Directly update your database: <comment>bin/console doctrine:schema:update --force</comment>', |
86
|
|
|
' Create a Doctrine migration and run it: <comment>bin/console doctrine:migrations:diff && bin/console doctrine:migrations:migrate</comment>', ) |
87
|
|
|
); |
88
|
|
|
|
89
|
|
|
if ($createPage) { |
90
|
|
|
$output->writeln(' New DataFixtures were created. You can load them via: <comment>bin/console doctrine:fixtures:load --fixtures=src/'.str_replace('\\', '/', $bundle->getNamespace()).'/DataFixtures/ORM/SearchPageGenerator/ --append</comment>'); |
91
|
|
|
} |
92
|
|
|
|
93
|
|
|
$output->writeln(''); |
94
|
|
|
|
95
|
|
|
return 0; |
96
|
|
|
} |
97
|
|
|
|
98
|
|
View Code Duplication |
protected function interact(InputInterface $input, OutputInterface $output) |
|
|
|
|
99
|
|
|
{ |
100
|
|
|
$questionHelper = $this->getQuestionHelper(); |
101
|
|
|
$questionHelper->writeSection($output, 'Welcome to the SearchPage generator'); |
102
|
|
|
|
103
|
|
|
$inputAssistant = GeneratorUtils::getInputAssistant($input, $output, $questionHelper, $this->getApplication()->getKernel(), $this->getContainer()); |
|
|
|
|
104
|
|
|
|
105
|
|
|
if (Kernel::VERSION_ID >= 40000) { |
106
|
|
|
$inputAssistant->askForPrefix(); |
107
|
|
|
|
108
|
|
|
return; |
109
|
|
|
} |
110
|
|
|
|
111
|
|
|
$inputAssistant->askForNamespace(array( |
112
|
|
|
'', |
113
|
|
|
'This command helps you to generate a SearchPage.', |
114
|
|
|
'You must specify the namespace of the bundle where you want to generate the SearchPage in.', |
115
|
|
|
'Use <comment>/</comment> instead of <comment>\\ </comment>for the namespace delimiter to avoid any problem.', |
116
|
|
|
'', |
117
|
|
|
)); |
118
|
|
|
|
119
|
|
|
$inputAssistant->askForPrefix(); |
120
|
|
|
} |
121
|
|
|
|
122
|
|
|
protected function createGenerator() |
123
|
|
|
{ |
124
|
|
|
return new SearchPageGenerator($this->getContainer()->get('filesystem'), '/searchpage', $this->getContainer()->getParameter('kernel.project_dir')); |
|
|
|
|
125
|
|
|
} |
126
|
|
|
} |
127
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.