/**
  * 返回工厂实例,单例模式
  */
 public static function factory($driver = null)
 {
     //只实例化一个对象
     if (self::$viewFactory == '') {
         self::$viewFactory = new viewFactory($driver);
     }
     if (is_null($driver)) {
         $driver = C("TPL_ENGINE");
     }
     if (isset(self::$viewFactory->driver_list[$driver])) {
         return self::$viewFactory->driver_list[$driver];
     }
     self::$viewFactory->getDriver($driver);
     return self::$viewFactory->driver_list[$driver];
 }
Exemple #2
0
 /**
  * 获得视图对象 
  */
 protected function getViewObj()
 {
     if (is_null($this->view)) {
         $this->view = viewFactory::factory();
     }
 }
Exemple #3
0
 /**
  * Executes a controller action
  * @Exception thrown if the action does not exist
  */
 public function route(Container $container)
 {
     // general configuration
     $generalConfig = isset($container['Config']['general']) ? $container['Config']['general'] : array();
     // per mvc component configuration
     $controllerConfig = array_merge($generalConfig, isset($container['Config']['controller']) ? $container['Config']['controller'] : array());
     $modelConfig = array_merge($generalConfig, isset($container['Config']['model']) ? $container['Config']['model'] : array());
     $viewConfig = array_merge($generalConfig, isset($container['Config']['view']) ? $container['Config']['view'] : array());
     // get the controller Object
     $controller = controllerFactory::getController($this->_controller, $controllerConfig);
     $controller->setControllerName($this->_controller);
     // inject any dependencies to the controller
     $container['Router'] = $this;
     $controller->setActionName($this->_action);
     $controller->setContainer($container);
     $viewName = substr($this->_controller, 0, -10);
     $view = viewFactory::getView($viewName, $viewConfig);
     $view->setController($this->_controller);
     $view->setViewName($this->_action);
     $view->setExtension('.php');
     $view->setTemplate('default.php');
     $controller->setView($view);
     $action = $this->_action . 'Action';
     if (method_exists($controller, $action)) {
         // execute always action every time,
         $controller->alwaysAction();
         // Execute beforeAction if exists
         $beforeAction = "before" . ucfirst($action);
         if (method_exists($controller, $beforeAction)) {
             $controller->{$beforeAction}();
         }
         // Execute the current action
         $controller->{$action}();
         // Execute after if exists
         $afterAction = "after" . ucfirst($action);
         if (method_exists($controller, $afterAction)) {
             $controller->{$afterAction}();
         }
         // execute view always action
         $controller->view->alwaysAction();
         // Execute the view action . _executeView will indicate which view to execute
         // if we indicate it via Controller::setView(view);
         $setViewName = $controller->view->getViewName() . 'Action';
         if (method_exists($controller->view, $setViewName)) {
             $controller->view->{$setViewName}();
         } else {
             if (method_exists($controller->view, $action)) {
                 $controller->view->{$action}();
                 // render any scripts after the view if set
                 $controller->view->renderScripts(true);
             }
         }
         // render the template
         if (true === $controller->view->renderTemplate) {
             $controller->view->renderTemplate();
         } else {
             $controller->view->main();
         }
     } else {
         throw new Exception('you have to specify a valid action for the controller ' . $this->_controller);
     }
 }