示例#1
0
 /**
  * @return IPresenterResponse
  */
 public function run(PresenterRequest $request)
 {
     $this->request = $request;
     $httpRequest = $this->context->getByType('IHttpRequest');
     if (!$httpRequest->isAjax() && ($request->isMethod('get') || $request->isMethod('head'))) {
         $refUrl = clone $httpRequest->getUrl();
         $url = $this->context->router->constructUrl($request, $refUrl->setPath($refUrl->getScriptPath()));
         if ($url !== NULL && !$httpRequest->getUrl()->isEqual($url)) {
             return new RedirectResponse($url, IHttpResponse::S301_MOVED_PERMANENTLY);
         }
     }
     $params = $request->getParameters();
     if (!isset($params['callback'])) {
         return;
     }
     $params['presenter'] = $this;
     $callback = new Callback($params['callback']);
     $response = $callback->invokeArgs(PresenterComponentReflection::combineArgs($callback->toReflection(), $params));
     if (is_string($response)) {
         $response = array($response, array());
     }
     if (is_array($response)) {
         if ($response[0] instanceof SplFileInfo) {
             $response = $this->createTemplate('FileTemplate')->setParameters($response[1])->setFile($response[0]);
         } else {
             $response = $this->createTemplate('Template')->setParameters($response[1])->setSource($response[0]);
         }
     }
     if ($response instanceof ITemplate) {
         return new TextResponse($response);
     } else {
         return $response;
     }
 }
示例#2
0
 /**
  * Conditional redirect to canonicalized URI.
  * @return void
  * @throws RedirectingException
  */
 public function canonicalize()
 {
     if (!$this->isAjax() && ($this->request->isMethod('get') || $this->request->isMethod('head'))) {
         $uri = $this->createRequest($this, $this->action, $this->getGlobalState() + $this->request->params, 'redirectX');
         if ($uri !== NULL && !$this->getHttpRequest()->getUri()->isEqual($uri)) {
             throw new RedirectingException($uri, IHttpResponse::S301_MOVED_PERMANENTLY);
         }
     }
 }
示例#3
0
 /**
  * Conditional redirect to canonicalized URI.
  * @return void
  * @throws AbortException
  */
 public function canonicalize()
 {
     if (!$this->isAjax() && ($this->request->isMethod('get') || $this->request->isMethod('head'))) {
         try {
             $url = $this->createRequest($this, $this->action, $this->getGlobalState() + $this->request->getParameters(), 'redirectX');
         } catch (InvalidLinkException $e) {
         }
         if (isset($url) && !$this->getHttpRequest()->getUrl()->isEqual($url)) {
             $this->sendResponse(new RedirectResponse($url, IHttpResponse::S301_MOVED_PERMANENTLY));
         }
     }
 }