These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
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() |
|
0 ignored issues
–
show
|
|||
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(); |
||
0 ignored issues
–
show
It seems like you code against a specific sub-type and not the parent class
Symfony\Component\Console\Application as the method getKernel() does only exist in the following sub-classes of Symfony\Component\Console\Application : Symfony\Bundle\FrameworkBundle\Console\Application . Maybe you want to instanceof check for one of these explicitly?
Let’s take a look at an example: abstract class User
{
/** @return string */
abstract public function getPassword();
}
class MyUser extends User
{
public function getPassword()
{
// return something
}
public function getDisplayName()
{
// return some name.
}
}
class AuthSystem
{
public function authenticate(User $user)
{
$this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
// do something.
}
}
In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break. Available Fixes
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types
inside the if block in such a case.
Loading history...
|
|||
79 | |||
80 | $generator = $this->getGenerator($this->getApplication()->getKernel()->getBundle('KunstmaanGeneratorBundle')); |
||
0 ignored issues
–
show
It seems like you code against a specific sub-type and not the parent class
Symfony\Component\Console\Application as the method getKernel() does only exist in the following sub-classes of Symfony\Component\Console\Application : Symfony\Bundle\FrameworkBundle\Console\Application . Maybe you want to instanceof check for one of these explicitly?
Let’s take a look at an example: abstract class User
{
/** @return string */
abstract public function getPassword();
}
class MyUser extends User
{
public function getPassword()
{
// return something
}
public function getDisplayName()
{
// return some name.
}
}
class AuthSystem
{
public function authenticate(User $user)
{
$this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
// do something.
}
}
In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break. Available Fixes
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types
inside the if block in such a case.
Loading history...
|
|||
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) |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
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.
Loading history...
|
|||
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.