Lâu nay khi các bạn sử dụng PHP framework các bạn có tự hỏi: Route trong framework đó được tạo ra như thế nào không ? Hôm nay mình sẽ chia sẻ cho các bạn cách tạo ra một router trong PHP theo ý hiểu của mình.
Khởi tạo project.
Đầu tiên mình sẽ tạo project như sau:
Trong đó:
1 2 3 4 5 | - index.php: File php bắt đầu của hệ thống. - .htaccess: File này dùng để rewrite lại url trước khi xử lý url trên server. - core/http/Route.php: xử lý gọi route và map route. - app/routes.php: chứa tất cả route của ứng dụng. |
Code
Bắt đầu với file .htaccess
trước.
1 2 3 4 5 | RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)$ index.php?url=$1 |
Chức năng: Chuyển mọi url từ dạng /segment1/segment2/… thành index.php?url=segment1/segment2/… và trả về cho server
Tiếp theo là file index.php
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">// Định nghĩa hằng Path của file index.php</span> <span class="token function">define</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'PATH_ROOT'</span><span class="token punctuation">,</span> <span class="token constant">__DIR__</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Autoload class trong PHP</span> <span class="token function">spl_autoload_register</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>string <span class="token variable">$class_name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">include_once</span> <span class="token constant">PATH_ROOT</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">.</span> <span class="token variable">$class_name</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'.php'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Lấy url hiện tại của trang web. Mặc định la /</span> <span class="token variable">$request_url</span> <span class="token operator">=</span> <span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'url'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">.</span> <span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'url'</span><span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token single-quoted-string string">'/'</span><span class="token punctuation">;</span> <span class="token comment">// Lấy phương thức hiện tại của url đang được gọi. (GET | POST). Mặc định là GET.</span> <span class="token variable">$method_url</span> <span class="token operator">=</span> <span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'REQUEST_METHOD'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token single-quoted-string string">'GET'</span><span class="token punctuation">;</span> </span> |
Đến đây, gọi thử một url ta sẽ nhận được:
Tiếp đến là file corehttpRoute.php
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 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">CoreHttp</span><span class="token punctuation">;</span> <span class="token comment">/** * * Class Route * */</span> <span class="token keyword">class</span> <span class="token class-name">Route</span> <span class="token punctuation">{</span> <span class="token comment">/** * * - Mảng lưu trữ route của ứng dụng * - Mỗi route sẽ gôm url, method, action và params * */</span> <span class="token keyword">private</span> <span class="token variable">$__routes</span><span class="token punctuation">;</span> <span class="token comment">// Hàm khởi tạo</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</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">__routes</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * * Phương thức get * * @param string $url URL cần so khớp * @param string|callable $action Hành động khi URL được gọi. Có thể là một callback hoặc một method trong controller * * @return void * */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">get</span><span class="token punctuation">(</span>string <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Xử lý phương thức GET</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">__request</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'GET'</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * * Phương thức POST * * @param string $url URL cần so khớp * @param string|callable $action Hành động khi URL được gọi. Có thể là một callback hoặc một method trong controller * * @return void * */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">post</span><span class="token punctuation">(</span>string <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Xử lý phương thức POST</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">__request</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'POST'</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * * Xử lý phương thức * * @param string $url URL cần so khớp * @param string $method method của route. GET hoặc POST * @param string|callable $action Hành động khi URL được gọi. Có thể là một callback hoặc một method trong controller * * @return void * */</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function">__request</span><span class="token punctuation">(</span>string <span class="token variable">$url</span><span class="token punctuation">,</span> string <span class="token variable">$method</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// kiem tra xem URL co chua param khong. VD: post/{id}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">preg_match_all</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/({([a-zA-Z]+)})/'</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token function">preg_replace</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/({([a-zA-Z]+)})/'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'(.+)'</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Thay the tat ca cac ki tu / bang ky tu / (regex) trong URL.</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'/'</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$route</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'url'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'method'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$method</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'action'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$action</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'params'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$params</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token function">array_push</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">__routes</span><span class="token punctuation">,</span> <span class="token variable">$route</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * * Hàm xử lý khi một URL được gọi * * @param string $url URL được gọi đến server * @param string $method Phương thức url được gọi. GET | POST * * @return void * */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">map</span><span class="token punctuation">(</span>string <span class="token variable">$url</span><span class="token punctuation">,</span> string <span class="token variable">$method</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// code</span> <span class="token punctuation">}</span> </span> |
Bây giờ ta viết hàm request.
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 keyword">private</span> <span class="token keyword">function</span> <span class="token function">__request</span><span class="token punctuation">(</span>string <span class="token variable">$url</span><span class="token punctuation">,</span> string <span class="token variable">$method</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// kiểm tra xem URL có chứa param không. VD: post/{id}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">preg_match_all</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/({([a-zA-Z]+)})/'</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// thay thế param bằng (.+). VD: post/{id} -> post/(.+)</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token function">preg_replace</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/({([a-zA-Z]+)})/'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'(.+)'</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Thay thế tất cả các kí tự / bằng ký tự / (regex) trong URL.</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'/'</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Tạo một route mới</span> <span class="token variable">$route</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'url'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'method'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$method</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'action'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$action</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'params'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$params</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// Thêm route vào router.</span> <span class="token function">array_push</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">__routes</span><span class="token punctuation">,</span> <span class="token variable">$route</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Quay lại file index.php
, thêm code mới ta được
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 comment">// Định nghĩa hằng Path của file index.php</span> <span class="token function">define</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'PATH_ROOT'</span><span class="token punctuation">,</span> <span class="token constant">__DIR__</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Autoload class trong PHP</span> <span class="token function">spl_autoload_register</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>string <span class="token variable">$class_name</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">include_once</span> <span class="token constant">PATH_ROOT</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">.</span> <span class="token variable">$class_name</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'.php'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// load class Route</span> <span class="token variable">$router</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CoreHttpRoute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">include_once</span> <span class="token constant">PATH_ROOT</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'/app/routes.php'</span><span class="token punctuation">;</span> <span class="token comment">// Lấy url hiện tại của trang web. Mặc định la /</span> <span class="token variable">$request_url</span> <span class="token operator">=</span> <span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'url'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">.</span> <span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'url'</span><span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token single-quoted-string string">'/'</span><span class="token punctuation">;</span> <span class="token comment">// Lấy phương thức hiện tại của url đang được gọi. (GET | POST). Mặc định là GET.</span> <span class="token variable">$method_url</span> <span class="token operator">=</span> <span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'REQUEST_METHOD'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token single-quoted-string string">'GET'</span><span class="token punctuation">;</span> <span class="token comment">// map URL</span> <span class="token variable">$router</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">map</span><span class="token punctuation">(</span><span class="token variable">$request_url</span><span class="token punctuation">,</span> <span class="token variable">$method_url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Quay lại file corehttpRoute.php
ta viết hàm map cho route.
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 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">map</span><span class="token punctuation">(</span>string <span class="token variable">$url</span><span class="token punctuation">,</span> string <span class="token variable">$method</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Lặp qua các route trong ứng dụng, kiểm tra có chứa url được gọi không</span> <span class="token keyword">foreach</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">__routes</span> <span class="token keyword">as</span> <span class="token variable">$route</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// nếu route có $method</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$route</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'method'</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token variable">$method</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// kiểm tra route hiện tại có phải là url đang được gọi.</span> <span class="token variable">$reg</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'/^'</span> <span class="token punctuation">.</span> <span class="token variable">$route</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'url'</span><span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'$/'</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">preg_match</span><span class="token punctuation">(</span><span class="token variable">$reg</span><span class="token punctuation">,</span> <span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">array_shift</span><span class="token punctuation">(</span><span class="token variable">$params</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 function">__call_action_route</span><span class="token punctuation">(</span><span class="token variable">$route</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'action'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">// nếu không khớp với bất kì route nào cả.</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'404 - Not Found'</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * * Hàm gọi action route * * @param string|callable $action action của route * @param array $params Các tham số trên url * * @return void * */</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function">__call_action_route</span><span class="token punctuation">(</span><span class="token variable">$action</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Nếu $action là một callback (một hàm).</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">is_callable</span><span class="token punctuation">(</span><span class="token variable">$action</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">call_user_func_array</span><span class="token punctuation">(</span><span class="token variable">$action</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Nếu $action là một phương thức của controller. VD: 'HomeControll<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>'.</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">is_string</span><span class="token punctuation">(</span><span class="token variable">$action</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$action</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'@'</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$controller_name</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'App\Controllers\'</span> <span class="token punctuation">.</span> <span class="token variable">$action</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$controller</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token variable">$controller_name</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">call_user_func_array</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token variable">$controller</span><span class="token punctuation">,</span> <span class="token variable">$action</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Chuyển qua file app/routes.php
1 2 3 4 5 6 7 8 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">// action là callback</span> <span class="token variable">$router</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">get</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'home'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </span> |
Các bạn tự chạy thử.
Trong trường hợp action là một controller thì ta cần tạo ra một controller trong thư mục app/controllers
. Ví dụ ta tạo controller app/controllers/HomeController.php
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">AppControllers</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">HomeController</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">index</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'home'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
và quay lại file app/routes.php
1 2 3 4 5 6 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">// action là callback</span> <span class="token variable">$router</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">get</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'/'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </span> |
Các bạn tự chạy và xem thành quả.
Tổng kết
Như vậy tạo ra một router trong PHP cũng không quá khó phải không các bạn ? so easy