For a long time when you have used PHP framework, you have wondered: How was the route in that framework created? Today I will share with you how to create a router in PHP according to my understanding.
Project initialization.
First, I will create a project as follows:
Inside:
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
Start with the .htaccess
file first.
1 2 3 4 5 | RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)$ index.php?url=$1 |
Function: Convert any url from / segment1 / segment2 / … to index.php? Url = segment1 / segment2 / … and return it to the server
Next is the 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> |
At this point, call test a url we will get:
Next is the 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">Core Http</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> |
Now we write the request function.
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> |
Go back to file index.php
, add new code
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">Core Http Route</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> |
Back to file corehttpRoute.php
we write a map function for the 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> |
Pass the 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> |
You guys try it yourself.
In case the action is a controller then we need to create a controller in the app/controllers
directory. For example we create 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">App Controllers</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> |
and return to the app/routes.php
file
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> |
You run by yourself and see the results.
summary
So creating a router in PHP is not too difficult, right? so easy