Пример #1
0
 /**
  *  フレームワークの処理を実行する(WWW)
  *
  *  引数$default_action_nameに配列が指定された場合、その配列で指定された
  *  アクション以外は受け付けない(指定されていないアクションが指定された
  *  場合、配列の先頭で指定されたアクションが実行される)
  *
  */
 public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true) : Response
 {
     $default_action_name = $this->default_action_name;
     self::$instance = $this;
     Ethna::setErrorCallback(array($this, 'handleError'));
     $this->container = new Ethna_Container(BASE, $this->directory, $this->class, $this->appid, $this->locale, $this->sessionName);
     $this->directory = $this->container->getDirectories();
     $config = $this->container->getConfig();
     $url = $config->get('url');
     if (empty($url)) {
         $url = Ethna_Util::getUrlFromRequestUri();
         $config->set('url', $url);
     }
     $this->container->url = $url;
     $plugin = $this->container->getPlugin();
     $this->logger = $this->container->getLogger();
     $plugin->setLogger($this->logger);
     $this->logger->begin();
     $actionDir = $this->directory['action'] . "/";
     $default_form_class = $this->class['form'];
     $actionResolverClass = $this->class['action_resolver'];
     /** @var Ethna_ActionResolver $actionResolver */
     $actionResolver = new $actionResolverClass($this->container->getAppId(), $this->logger, $default_form_class, $actionDir);
     $this->container->setActionResolver($actionResolver);
     // アクション名の取得
     $action_name = $actionResolver->resolveActionName($request, $default_action_name);
     $this->container->setCurrentActionName($action_name);
     $this->container->getSession()->restore();
     $i18n = $this->container->getI18N();
     $i18n->setLanguage($this->locale);
     // アクションフォーム初期化
     // フォーム定義、フォーム値設定
     $action_form = $actionResolver->newActionForm($action_name, $this->container);
     $this->container->setActionForm($action_form);
     $viewResolver = new Ethna_ViewResolver($this->container, $this->logger, $this->container->getViewdir(), $this->container->getAppId(), $this->class['view']);
     $callable = $actionResolver->getController($request, $action_name, $this->container, $action_form, $viewResolver);
     $arguments = [$request];
     $response = call_user_func_array($callable, $arguments);
     return $response;
 }