CViewBasic::set()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 1
eloc 5
nc 1
nop 4
1
<?php
2
3
namespace Anax\View;
4
5
/**
6
 * A view connected to a template file.
7
 *
8
 */
9
class CViewBasic implements \Anax\DI\IInjectionAware
10
{
11
    use \Anax\DI\TInjectable;
12
13
14
15
    /**
16
    * Properties
17
    *
18
    */
19
    private $template;          // Template file or array
20
    private $templateData = []; // Data to send to template file
21
    private $sortOrder;         // For sorting views
22
    private $type;              // Type of view
23
24
25
26
    /**
27
     * Set values for the view.
28
     *
29
     * @param string/array $template the template file, or array
0 ignored issues
show
Documentation introduced by
The doc-type string/array could not be parsed: Unknown type name "string/array" at position 0. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
30
     * @param array        $data     variables to make available to the view, default is empty
31
     * @param int          $sort     which order to display the views, if suitable
32
     * @param string       $type     which type of view
33
     *
34
     * @return $this
35
     */
36
    public function set($template, $data = [], $sort = 0, $type = 'file')
37
    {
38
        $this->template     = $template;
39
        $this->templateData = $data;
40
        $this->sortOrder    = $sort;
41
        $this->type         = $type;
42
    }
43
44
45
    /**
46
     * Render the view.
47
     *
48
     * @return void
49
     * @throws \Exception
50
     */
51
    public function render()
52
    {
53
        switch ($this->type) {
54
55
            case 'file':
56
                if (!is_readable($this->template)) {
57
                    throw new \Exception("Could not find template file: " . $this->template);
58
                }
59
60
                extract($this->templateData);
61
                include $this->template;
62
63
                break;
64
65
            case 'callback':
66
                if (!isset($this->template['callback']) || !is_callable($this->template['callback'])) {
67
                    throw new \Exception("View missing callback.");
68
                }
69
70
                echo call_user_func($this->template['callback']);
71
72
                break;
73
74
            case 'string':
75
                echo $this->template;
76
77
                break;
78
79
            default:
80
                throw new \Exception("Not a valid template type: " . $this->type);
81
        }
82
    }
83
84
85
86
    /**
87
     * Give the sort order for this view.
88
     *
89
     * @return int
90
     */
91
    public function sortOrder()
92
    {
93
        return $this->sortOrder;
94
    }
95
}
96