Пример #1
0
 public function build()
 {
     $container = $this->builder->getContainer();
     $fullPath = $container->getNamespacePrefix($this->getSection()) . 'Model\\' . ucfirst($container->inflector->pluralize($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->model), '\\');
     $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;
     // Let's create some type-hints for the model class
     $typeHints = new ModelTypeHints($this->model);
     $typeHints->setClassName($fullPath);
     $docBlock = $typeHints->getHints();
     $code .= $docBlock;
     $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 .= '/Model/' . $className . '.php';
     $filesystem = $container->filesystem;
     $filesystem->fileWrite($path, $code);
     return $path;
 }
Пример #2
0
 public function execute()
 {
     // Backend or frontend?
     $section = $this->input->get('frontend', false) ? 'site' : 'admin';
     $view = $this->getViewName($this->input);
     // Let's force the use of the Magic Factory
     $container = Container::getInstance($this->component, array('factoryClass' => 'FOF30\\Factory\\MagicFactory'));
     $container->factory->setSaveScaffolding(true);
     // plural / singular
     $view = $container->inflector->singularize($view);
     $classname = $container->getNamespacePrefix($section) . 'Controller\\' . ucfirst($view);
     $scaffolding = new ControllerBuilder($container);
     $scaffolding->setSection($section);
     if (!$scaffolding->make($classname, $view)) {
         throw new \RuntimeException("An error occurred while creating the Controller class");
     }
 }
Пример #3
0
 /**
  * Create a new Controller object
  *
  * @param   string  $viewName  The name of the view we're getting a Controller for.
  * @param   array   $config    Optional MVC configuration values for the Controller object.
  *
  * @return  Controller
  */
 public function controller($viewName, array $config = array())
 {
     $controllerClass = $this->container->getNamespacePrefix($this->getSection()) . 'Controller\\' . ucfirst($viewName);
     try {
         return $this->createController($controllerClass, $config);
     } catch (ControllerNotFound $e) {
     }
     $controllerClass = $this->container->getNamespacePrefix($this->getSection()) . 'Controller\\' . ucfirst($this->container->inflector->singularize($viewName));
     try {
         $controller = $this->createController($controllerClass, $config);
     } catch (ControllerNotFound $e) {
         // Do I have to create and save the class file? If not, let's rethrow the exception
         if (!$this->saveControllerScaffolding) {
             throw $e;
         }
         $scaffolding = new ControllerBuilder($this->container);
         // Was the scaffolding successful? If so let's call ourself again, otherwise throw a not found exception
         if ($scaffolding->make($controllerClass, $viewName)) {
             $controller = $this->controller($viewName, $config);
         } else {
             throw $e;
         }
     }
     return $controller;
 }