FOF30\Factory\Scaffolding\Controller\ControllerErector::build PHP Метод

build() публичный Метод

public build ( )
    public function build()
    {
        $container = $this->builder->getContainer();
        $fullPath = $container->getNamespacePrefix($this->getSection()) . 'Controller\\' . ucfirst($container->inflector->singularize($this->viewName));
        // Let's remove the last part and use it to create the class name
        $parts = explode('\\', trim($fullPath, '\\'));
        $className = array_pop($parts);
        // Now glue everything together
        $namespace = implode('\\', $parts);
        // Let's be sure that the parent class extends with a backslash
        $baseClass = '\\' . trim(get_class($this->controller), '\\');
        $code = '<?php' . PHP_EOL;
        $code .= PHP_EOL;
        $code .= 'namespace ' . $namespace . ';' . PHP_EOL;
        $code .= PHP_EOL;
        $code .= "defined('_JEXEC') or die;" . PHP_EOL;
        $code .= PHP_EOL;
        $code .= 'class ' . $className . ' extends ' . $baseClass . PHP_EOL;
        $code .= '{' . PHP_EOL;
        $code .= PHP_EOL;
        $code .= '}' . PHP_EOL;
        $path = $container->backEndPath;
        if (in_array('Site', $parts)) {
            $path = $container->frontEndPath;
        }
        $path .= '/Controller/' . $className . '.php';
        $filesystem = $container->filesystem;
        $filesystem->fileWrite($path, $code);
        return $path;
    }

Usage Example

Пример #1
0
 /**
  * Make a new scaffolding document
  *
  * @param   string  $requestedClass     The requested class, with full qualifier ie Myapp\Site\Controller\Foobar
  * @param   string  $viewName           The name of the view linked to this controller
  *
  * @return  bool    True on success, false otherwise
  */
 public function make($requestedClass, $viewName)
 {
     // Class already exists? Stop here
     if (class_exists($requestedClass)) {
         return true;
     }
     // I have to magically create the controller class
     $magic = new ControllerFactory($this->container);
     $magic->setSection($this->getSection());
     $fofController = $magic->make($viewName);
     /** @var ErectorInterface $erector */
     $erector = new ControllerErector($this, $fofController, $viewName);
     $erector->setSection($this->getSection());
     $erector->build();
     if (!class_exists($requestedClass)) {
         return false;
     }
     return true;
 }