示例#1
0
 private function updateBundleRoutes(ControllerSpec $spec)
 {
     $bundle = $spec->getBundle();
     $bundleRoutingFile = $bundle->getPath() . '/Resources/config/routing.yml';
     if (!realpath($bundleRoutingFile)) {
         return false;
     }
     $routing = Yaml::parse(file_get_contents($bundleRoutingFile));
     $prefix = strtolower($spec->getName());
     foreach ($spec->getActions() as $action) {
         $key = $prefix . '_' . strtolower($action);
         $routing[$key] = array('path' => '/' . $action, 'defaults' => array('_controller' => $bundle->getName() . ':' . $spec->getName() . ':' . $action));
     }
     file_put_contents($bundleRoutingFile, Yaml::dump($routing));
 }
 /**
  * @param ControllerSpec $spec
  * @return \PhpParser\Node[]
  */
 private function doGenerate(ControllerSpec $spec)
 {
     $factory = new \PhpParser\BuilderFactory();
     $stmts = array();
     $stmts[] = $factory->namespace(array($spec->getBundle()->getNamespace(), 'Controller'));
     $class = $factory->class($spec->getName() . 'Controller');
     if ($spec->getBaseClass()) {
         $stmts[] = $factory->use($spec->getBaseClass());
         $class->extend(new Name(array_slice($spec->getBaseClass(), -1, 1)));
         if ($spec->getOptions()->isStrictOOP()) {
             $class->makeFinal();
         }
     }
     foreach ($spec->getActions() as $action) {
         $class->addStmt($factory->method($action . 'Action'));
     }
     $stmts[] = $class;
     $nodes = array_map(function ($stmt) {
         return $stmt->getNode();
     }, $stmts);
     return $nodes;
 }