/** * {@inheritdoc} */ public function generate(Arguments $arguments, BuilderInterface $builder, GeneratorDispatcherInterface $dispatcher) { $builder->mkdir($arguments['dir']); $builder->in($arguments['dir'], function (BuilderInterface $builder) use($arguments) { $builder->template('Bundle.php.twig', "{$arguments->name}.php"); $builder->in('DependencyInjection', function (BuilderInterface $builder) use($arguments) { $builder->template('Configuration.php.twig', 'Configuration.php'); $builder->template('Extension.php.twig', "{$arguments['basename']}Extension.php"); }); $builder->in('Resources/config', function (BuilderInterface $builder) use($arguments) { $builder->template('services.yml.twig', 'services.yml'); }); $builder->mkdir('Controller'); $builder->mkdir('Resources/views'); if ($arguments['structure']) { $builder->mkdir('Resources/doc'); $builder->mkdir('Resources/translations'); $builder->touch('Resources/translations/messages.nl.po'); $builder->mkdir('Entity'); $builder->mkdir('Form'); } }); if ($arguments['update-kernel']) { $bundleClass = "{$arguments['namespace']}\\{$arguments['name']}"; $builder->modify('app/AppKernel.php', function ($content) use($bundleClass) { $count = preg_match("#([\t ]+)// project bundles\n#", $content, $matches, PREG_OFFSET_CAPTURE); if ($count === 1) { $match = $matches[0]; $at = strlen($match[0]) + $match[1]; $spaces = $matches[1][0]; $content = substr($content, 0, $at) . "{$spaces}new {$bundleClass}(),\n" . substr($content, $at); } return $content; }); } if ($arguments['update-routing']) { $builder->prepend('app/config/routing.yml', "{$arguments['alias']}:\n resource: \"@{$arguments['name']}/Controller/\"\n type: annotation\n prefix: /\n\n"); } }