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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
<?php
namespace FluentMail\Includes\View;
use Exception;
class View { protected $app;
protected $path;
protected $data = []; protected static $sharedData = [];
public function __construct($app) { $this->app = $app; }
/** * Generate and echo/print a view file * @param string $path * @param array $data * @return void */ public function render($path, $data = []) { echo $this->make($path, $data); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped }
/** * Generate a view file * @param string $path * @param array $data * @return string [generated html] * @throws Exception */ public function make($path, $data = []) { if (file_exists($this->path = $this->resolveFilePath($path))) { $this->data = $data; return $this; }
throw new Exception("The view file [{$this->path}] doesn't exists!"); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped }
/** * Resolve the view file path * @param string $path * @return string */ protected function resolveFilePath($path) { $path = str_replace('.', DIRECTORY_SEPARATOR, $path);
return $this->app['path.views'] . $path .'.php'; }
/** * Evaluate the view file * @param string $path * @param string $data * @return $this */ protected function renderContent() { $renderOutput = function($app) { ob_start() && extract( $this->gatherData(), EXTR_SKIP );
include $this->path;
return ltrim(ob_get_clean()); };
return $renderOutput($this->app); }
/** * Gether shared & view data * @return array */ protected function gatherData() { return array_merge(static::$sharedData, $this->data); }
/** * Share global data for any view * @param string $key * @param mixed $value * @return void */ public function share($key, $value) { static::$sharedData[$key] = $value; }
/** * Provides a fluent interface to set data * @param mixed $key * @param mixed $data * @return $this */ public function with($name, $data = []) { if (is_array($name)) { foreach ($name as $key => $value) { $this->__set($key, $value); } } else { $this->__set($name, $data); } return $this; }
/** * Setter for the view * @param string $key * @param mixed $value */ public function __set($key, $value) { $this->data[$key] = $value; }
/** * Dump the view result * @return string */ public function __toString() { return $this->renderContent(); } }
|