This is a series of articles in an easy to understand, simple, basic style, suitable for those starting with Laravel from scratch.
Laravel Routing
This section will cover the following:
- How to define a route.
- How to pass route parameters to the view
- Respond to a request with the controller’s handler function.
- A little introduction to php artisan
How to define a route – Basic Routing and Views
In a laravel project, the routes directory is the directory where you can define all the paths for your website. The basic syntax is as follows:
1 2 3 4 5 | <span class="token shell-comment comment">#Trả về view welcome</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</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">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'welcome'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
When we request to the web with the get
method and the path is /
(corresponding to the homepage), the function declared inside will be executed. Normally, inside the function, a corresponding view will be returned. Laravel will check the views in the resources / views directory and return the view we requested (if any).
Here we can customize HTTP methods, path path, function inner handler and return object (can be string, view, json, variable, …)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</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">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'welcome'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/info'</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">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token shell-comment comment"># / is optional</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string 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">return</span> <span class="token single-quoted-string string">'Hello world!'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'json'</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">return</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'foo'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'bar'</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
How to pass parameters in the route to the view – Pass Request Data to Views
We can get the data from the request through the query string using the helper function request.
For example, the link is http://127.0.0.1:8000/info?name=tientt
we can get the data as follows:
1 2 3 4 5 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/info'</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 variable">$name</span> <span class="token operator">=</span> <span class="token function">request</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'name'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
And to have that variable take effect in the view, we can program it as follows:
1 2 3 4 5 6 7 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/info'</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 variable">$name</span> <span class="token operator">=</span> <span class="token function">request</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'name'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$name</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Alternatively, let’s consider a way to reduce the code like (refractoring):
1 2 3 4 5 6 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/info'</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">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</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 single-quoted-string string">'name'</span> <span class="token punctuation">)</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In the view there are ways to call the following variables:
1 2 3 4 5 6 7 | # Cách 1 <span class="token php language-php"><span class="token delimiter important"><?=</span> <span class="token variable">$name</span> <span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> # Cách 2 {!! $name !!} # Cách 3 {{ $name }} |
We will have some notes here:
- The first two ways will purely print out the contents of the variable. Therefore, the user can pass a script and of course when the request comes to the corresponding link, the script will be executed immediately. This is quite dangerous and violates security regulations. Therefore, the recommended way would be method 3. This command line processing will escape the passed-in code.
- Method 2 and 3 is the pure command line of laravel, php will not understand this syntax. But laravel will automatically render the corresponding syntax, which is suitable for php. You can check the corresponding php command in the
storage/framework/views
.
Route Wildcards
We continue to look at the next example on how to use routing. Let’s take a look at the following 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 shell-comment comment">#Ở đây ta thấy {detail} đây được hiểu là tham số Optional (tham số có thể truyền vào </span> hoặc không <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token constant">N</span> ếu ta truyền bất kỳ nội dung nào sau info <span class="token operator">/</span> thì đều dẫn tới thực thi các xử lý trong hàm <span class="token punctuation">.</span> Đồng thời <span class="token punctuation">,</span> nếu muốn sử dụng nội dung đó <span class="token punctuation">,</span> ta có thể khai báo đối số cho hàm như code phía dưới <span class="token punctuation">(</span> <span class="token variable">$detail</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token constant">V</span> ới đoạn code này <span class="token punctuation">,</span> ta có thể hiểu nhiệm vụ của <span class="token variable">$detail</span> là key quyết định nội dung <span class="token punctuation">(</span> trong mảng <span class="token variable">$details</span> <span class="token punctuation">)</span> sẽ được trả về cho view <span class="token punctuation">.</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info/{detail}'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$detail</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$details</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'my-first-detail'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'This is my first detail.'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'my-second-detail'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'This is my second detail.'</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token shell-comment comment"># Đoạn code dưới cũng phản ánh một trong những nguyên tắc code quan trọng. Đó là ta luôn phải </span> check liệu đối tượng đó có tồn tại ở đâu hay không <span class="token operator">?</span> <span class="token punctuation">,</span> hay có khác <span class="token constant">NULL</span> hay không <span class="token punctuation">,</span> tránh làm chết trang web bằng một loạt các thông báo lỗi mà không có nhiều ý nghĩa đối với người dùng <span class="token punctuation">.</span> Trong trường hợp này <span class="token punctuation">,</span> nếu không tồn tại key tương ứng <span class="token punctuation">,</span> trang web sẽ trả về mã lỗi kèm với thông điệp <span class="token punctuation">.</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token operator">!</span> <span class="token function">array_key_exists</span> <span class="token punctuation">(</span> <span class="token variable">$detail</span> <span class="token punctuation">,</span> <span class="token variable">$details</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">abort</span> <span class="token punctuation">(</span> <span class="token number">404</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Sorry, that detail was not found.'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'detail'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$details</span> <span class="token punctuation">[</span> <span class="token variable">$detail</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Responding to a request using the controller handler function.
When responding to a request instead of a function, we can lead to a controller with the corresponding method. Gradually, we can see how the MVC pattern is applied in laravel. How to start the method in the controller corresponding to the request:
1 2 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info/{detail}'</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> |
The following code will have the same handling in the Route Wildcards code:
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 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Http Controllers</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Http Request</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">InfosController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">show</span> <span class="token punctuation">(</span> <span class="token variable">$detail</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$details</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'my-first-detail'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'This is my first detail.'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'my-second-detail'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'This is my second detail.'</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token operator">!</span> <span class="token function">array_key_exists</span> <span class="token punctuation">(</span> <span class="token variable">$detail</span> <span class="token punctuation">,</span> <span class="token variable">$details</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">abort</span> <span class="token punctuation">(</span> <span class="token number">404</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Sorry, that detail was not found.'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'info'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'detail'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$details</span> <span class="token punctuation">[</span> <span class="token variable">$detail</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
About php artisan
In addition to the php artisan serve
command that is very familiar to everyone, php artisan has many other uses. You can type php artisan
code to see what this tool can do.
The application in this section is the controller generation syntax with the command: php artisan make:controller InfosController
This part is here to be concluded! Reference source: https://laracasts.com/series/laravel-6-from-scratch/