Templating
The template engine works to clean up the PHP code in View so separating the code and html makes it easier to see and maintain. Php itself is also considered to be a template enginer, but the way of writing the code and the handling it supports is not as flexible and difficult to read than other platforms. Some commonly used php templates like Laravel’s Blade, Smarty, Twig …
for example using pure php + html
1 2 3 4 5 6 7 | <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> hello <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'Name'</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> html</span> <span class="token punctuation">></span></span> |
for example using blade template
1 2 3 4 5 6 | <span class="token operator"><</span> html <span class="token operator">></span> <span class="token operator"><</span> body <span class="token operator">></span> hello <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token variable">$name</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> body <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> html <span class="token operator">></span> |
** Blade template **
In this article I will use the blade template used in laravel project, the document you can find here Blade Template
To create an example, we need to do the following steps
- integrated library
- add route
- Add controller handle
- add view
Integrate the library
How to integrate blade template into the project, run the following command to install the library:
1 2 | composer require jenssegers/blade |
User documentation, refer here https://github.com/jenssegers/blade
Add the following code to app / Dependencies.php file, the reason and the thought of adding this code, I explained in the previous parts:
1 2 3 4 5 6 7 8 9 | <span class="token variable">$injector</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">define</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'JenssegersBladeBlade'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">':viewPaths'</span> <span class="token operator">=</span> <span class="token operator">></span> __dir__ <span class="token punctuation">.</span> <span class="token single-quoted-string string">'/../views'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">':cachePath'</span> <span class="token operator">=</span> <span class="token operator">></span> __dir__ <span class="token punctuation">.</span> <span class="token single-quoted-string string">'/../storage/cache'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">':container'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token keyword">null</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$injector</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">share</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'JenssegersBladeBlade'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Meaning of the parameters
viewPaths : The root directory contains the template
cachePath : The directory containing the cache where the template code will be rendered in plain php
Create the router
Add the following code to your routes/web.php
file
1 2 | $router->addRoute('GET', '/test-blade', 'AppControllers <a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="88cae4e9ecedcbe7e6fcfae7e4e4edfac8fcedfbfccae4e9eced">[email protected]</a> '); |
Create controller
Add new app file Controllers BladeController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Controllers</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component HttpFoundation Response</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Jenssegers Blade Blade</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">BladeController</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span> <span class="token punctuation">(</span> Response <span class="token variable">$response</span> <span class="token punctuation">,</span> Blade <span class="token variable">$blade</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">response</span> <span class="token operator">=</span> <span class="token variable">$response</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">blade</span> <span class="token operator">=</span> <span class="token variable">$blade</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">testBlade</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'world'</span> <span class="token punctuation">;</span> <span class="token variable">$rs</span> <span class="token operator">=</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">blade</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">make</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'test-blade'</span> <span class="token punctuation">,</span> <span class="token variable">$data</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">render</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">response</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">setContent</span> <span class="token punctuation">(</span> <span class="token variable">$rs</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
$rs = $this->blade->make('test-blade', $data)->render();
test-blade name view displayed
$data['name'] = 'world';
The variable will be passed to the view
Create display view
The created view must be created in the folder declared above
1 2 | <span class="token single-quoted-string string">':viewPaths'</span> <span class="token operator">=</span> <span class="token operator">></span> __dir__ <span class="token punctuation">.</span> <span class="token single-quoted-string string">'/../views'</span> <span class="token punctuation">,</span> |
and the filename extension will be .blade.php
As the example above we will create a file in the views/test-blade.blade.php
with content
1 2 3 4 5 6 7 8 9 10 | <span class="token operator"><</span> <span class="token operator">!</span> <span class="token constant">DOCTYPE</span> html <span class="token operator">></span> <span class="token operator"><</span> html <span class="token operator">></span> <span class="token operator"><</span> head <span class="token operator">></span> <span class="token operator"><</span> title <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> title <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> head <span class="token operator">></span> <span class="token operator"><</span> body <span class="token operator">></span> Hello <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token variable">$name</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> body <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> html <span class="token operator">></span> |
{{ $name }}
shows the corresponding data when passed to view $data['name'] = 'world';
Result
Here is the result
github source: https://github.com/trangianhuan/build_mvc
part 5 to continue …