예제 #1
0
 /**
  * @covers ::render
  */
 public function testRender()
 {
     $htmlRender = new HtmlRender(['foo' => 'bar']);
     $output = $htmlRender->render(['_view' => 'tests/View/Test/Fixture/test.view', '_layout' => 'tests/View/Layout/Fixture/test.layout']);
     $this->assertSame('<layout><view>bar</view></layout>', $output);
 }
예제 #2
0
파일: Controller.php 프로젝트: zortje/mvc
 /**
  * Call action
  *
  * @return Response
  *
  * @throws \LogicException If controller action is not set
  */
 public function callAction() : Response
 {
     if (!isset($this->action)) {
         throw new \LogicException('Controller action must be set before being called');
     }
     /**
      * Before controller action hook
      */
     if ($this->beforeAction()) {
         /**
          * Call controller action
          */
         $action = $this->action;
         $this->{$action}();
         /**
          * After controller action hook
          */
         $this->afterAction();
     }
     /**
      * Render view
      */
     if ($this->render && $this->contentType === 'html') {
         if ($this->request->getCookie()->exists('Flash.Message') && $this->request->getCookie()->exists('Flash.Type')) {
             $this->set('_flash', ['message' => $this->request->getCookie()->get('Flash.Message'), 'type' => $this->request->getCookie()->get('Flash.Type')]);
             $this->request->getCookie()->remove('Flash.Message');
             $this->request->getCookie()->remove('Flash.Type');
         }
         /**
          * Set content type header
          */
         $this->headers['content-type'] = 'Content-Type: text/html; charset=utf-8';
         /**
          * Render output
          */
         $render = new HtmlRender($this->variables);
         $output = $render->render(['_view' => $this->getViewTemplate(), '_layout' => $this->getLayoutTemplate()]);
         /**
          * Return response
          */
         return new Response($this->headers, $this->request->getCookie(), $output);
     } elseif ($this->render && $this->contentType === 'json') {
         /**
          * Set content type header
          */
         $this->headers['content-type'] = 'Content-Type: application/javascript;';
         /**
          * Return response
          */
         return new Response($this->headers, null, json_encode($this->variables));
     }
     return new Response($this->headers, null, '');
 }