Templating
Template engine có tác dụng giúp làm sạch đi những đoạn code PHP nằm trong View nên tách biệt code và html giúp dễ nhìn và dễ bảo trì hơn. Bản thân php cũng được coi là một template enginer, tuy nhiên cách thức viết code và cách xử lý mà nó hỗ trợ không được uyển chuyển và khó khăn đọc hơn so với các nền tảng khác. Một số template php thường được sử dụng như Blade của Laravel, Smarty, Twig …
ví dụ dùng php thuần + 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> |
ví dụ dùng 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 **
ở bài viết này mình sẽ sử dụng blade template được sử dụng trong project laravel, document bạn có thể tìm thấy ở đây Blade Template
để tạo example thì ta cần làm các bước sau
- tích hợp thư viện
- thêm route
- thêm controller xử lí
- thêm view
Tích hơp thư viện
cách tính hợp blade template vào dự án, ta chạy command sau để cài đặt thư viện:
1 2 | composer require jenssegers/blade |
tài liệu hướng dẫn sử dụng thì tham khảo ở đây https://github.com/jenssegers/blade
thêm đoạn code sau vào file app/Dependencies.php, lí do và ý nghĩ thêm đoạn code này thì mình đã giải thích ở các part trước:
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> |
ý nghĩa các tham số
viewPaths: thư mục gốc chứa template
cachePath: thư mục chứa cache nơi chứa code template sẽ được render ra theo php thuần
Tạo router
thêm đoạn code sau vào file routes/web.php
1 2 | $router->addRoute('GET', '/test-blade', 'AppControllers<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="88cae4e9ecedcbe7e6fcfae7e4e4edfac8fcedfbfccae4e9eced">[email protected]</a>'); |
Tạo controller
thêm mới file appControllersBladeController.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<span class="token punctuation"></span>Controllers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony<span class="token punctuation"></span>Component<span class="token punctuation"></span>HttpFoundation<span class="token punctuation"></span>Response</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Jenssegers<span class="token punctuation"></span>Blade<span class="token punctuation"></span>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 tên view hiển thị
$data['name'] = 'world';
biến sẽ được truyền qua view
Tạo view hiển thị
view tạo phải được tạo ở folder đã khai báo ở trên
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> |
và tên đuôi file sẽ là .blade.php
như ví dụ trên ta sẽ tạo 1 file trong thư mục views/test-blade.blade.php
với nội dung
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 }}
hiển thị dữ liệu tương ứng khi truyền qua view $data['name'] = 'world';
Kết quả
đây là kết quả
github source : https://github.com/trangianhuan/build_mvc
part 5 to continue…