summaryrefslogtreecommitdiffstats
path: root/src/Controller/View.php
blob: 9f0f0b08131b35985b457fd7d651116c466fc31b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php

namespace Jasny\Controller;

use Jasny\ViewInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

/**
 * View using a template engine
 */
trait View
{
    /**
     * @var ViewInterface 
     */
    protected $viewer;
    
    /**
     * Get server request
     * 
     * @return ServerRequestInterface
     */
    abstract public function getRequest();
    
    /**
     * Get server request
     * 
     * @return ResponseInterface
     */
    abstract public function getResponse();

    /**
     * Get response. set for controller
     *
     * @param ResponseInterface $response
     * @return void
     */
    abstract public function setResponse(ResponseInterface $response);
    
    
    /**
     * Get the template engine abstraction
     * 
     * @return ViewInterface
     */
    public function getViewer()
    {
        if (!isset($this->viewer)) {
            throw new \LogicException("Viewer has not been set");
        }
        
        return $this->viewer;
    }
    
    /**
     * Get the template engine abstraction
     * 
     * @param ViewInterface $viewer
     */
    public function setViewer(ViewInterface $viewer)
    {
        $this->viewer = $viewer;
    }
    
    
    /**
     * Get path of the view files
     *
     * @return string
     */
    public function getViewPath()
    {
        return getcwd();
    }
    
    /**
     * View rendered template
     *
     * @param string $name    Template name
     * @param array  $context Template context
     */
    public function view($name, array $context = [])
    {
        $context += ['current_url' => $this->getRequest()->getUri()];
        
        if (method_exists($this, 'flash')) {
            $context += ['flash' => $this->flash()];
        }
        
        $response = $this->getViewer()->render($this->getResponse(), $name, $context);
        
        $this->setResponse($response);
    }
}