Example #1
0
 private function handle(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response, Yaf_View_Interface $view)
 {
     $request->setDispatched(true);
     $app = $this->getApplication();
     $appDir = $app->getAppDirectory();
     if ($appDir == '') {
         throw new Yaf_Exception_StartupError('Yaf_Dispatcher requires ' . 'Yaf_Application(which set the application.directory) ' . 'to be initialized first.');
     }
     $module = $request->getModuleName();
     if (empty($module)) {
         throw new Yaf_Exception_DispatchFailed('Unexcepted an empty module name');
     }
     if (!Yaf_Application::isModuleName($module)) {
         throw new Yaf_Exception_LoadFailed_Module('There is no module ' . $module);
     }
     $controllerName = $request->getControllerName();
     if (empty($controllerName)) {
         throw new Yaf_Exception_DispatchFailed('Unexcepted an empty controller name');
     }
     $className = $this->getController($appDir, $module, $controllerName);
     if (!$className) {
         return false;
     }
     $controller = new $className($request, $response, $view);
     if (!$controller instanceof Yaf_Controller_Abstract) {
         throw new Yaf_Exception_TypeError('Controller must be an instance of Yaf_Controller_Abstract');
     }
     $viewDir = $view->getScriptPath();
     //template dir might be set from the __construct
     if (empty($viewDir)) {
         $templateDir = '';
         if ($this->_default_module == $module) {
             $templateDir = $appDir . DIRECTORY_SEPARATOR . Yaf_Loader::YAF_VIEW_DIRECTORY_NAME;
         } else {
             $templateDir = $appDir . DIRECTORY_SEPARATOR . Yaf_Loader::YAF_MODULE_DIRECTORY_NAME . DIRECTORY_SEPARATOR . $module . DIRECTORY_SEPARATOR . Yaf_Loader::YAF_VIEW_DIRECTORY_NAME;
         }
         $view->setScriptPath($templateDir);
         unset($templateDir);
     }
     $action = $request->getActionName();
     $actionMethod = $action . 'Action';
     if (method_exists($controller, $actionMethod)) {
         //Get all action method parameters
         $methodParams = $this->getActionParams($className, $actionMethod);
         if (null == $methodParams) {
             $ret = call_user_func(array($controller, $actionMethod));
         } else {
             $ret = call_user_func_array(array($controller, $actionMethod), $this->prepareActionParams($request, $methodParams));
         }
         if (is_bool($ret) && $ret == false) {
             return true;
         }
     } elseif (($actionController = $this->getAction($appDir, $controller, $action, $module)) != null) {
         //check if not in actions vars we have the action
         $actionMethod = 'execute';
         if (method_exists($actionController, $actionMethod)) {
             //Get all action method parameters
             $methodParams = $this->getActionParams(get_class($actionController), $actionMethod);
             $ret = null;
             if (null == $methodParams) {
                 $ret = call_user_func(array($actionController, $actionMethod));
             } else {
                 $ret = call_user_func_array(array($actionController, $actionMethod), $this->prepareActionParams($request, $methodParams));
             }
             if (is_bool($ret) && $ret == false) {
                 return true;
             }
         } else {
             throw new Yaf_Exception_LoadFailed_Action('There is no method ' . $actionMethod . ' in ' . get_class($controller) . '::$actions');
         }
     } else {
         return false;
     }
     if ($this->_auto_render == true) {
         if ($this->_instantly_flush == true) {
             $controller->display($action);
         } else {
             $ret = $controller->render($action);
             $response->setBody($ret);
         }
     }
     $controller = null;
 }
Example #2
0
 /**
  * 给View模块设置一个变量
  * 
  * @param string $name
  *            变量名
  * @param string $value
  *            变量值
  */
 protected function assign($name, $value)
 {
     return $this->_view->assign($name, $value);
 }