Introduce
- In the MVC model, the C – Controller specializes in handling the logic for user requests.
- When you go to a certain website, for example code.itzone.asia , you have sent a request to a Controller so that it takes you to the interface of that website.
Controller
1. Create a controller
- In laravel, to create a controller, you use the command:
1 2 | php artisan make:controller ten_controller |
- Result:
1 2 3 4 5 6 7 8 9 10 11 | <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-definition class-name">ten_controller</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> </span> |
- Here you can define functions to handle the logic you want.
- But how should it be defined? What should be defined here?
- Then here is an example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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-definition class-name">ten_controller</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-definition function">index</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 string single-quoted-string">'hello world'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
- When you declare a function as index , by default when you call this controller function index will be run.
- In addition to the index , there is also a function that will run by default when you call the controller __invoke :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <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-definition class-name">ten_controller</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token comment">/** * Provision a new web server. * * @return IlluminateHttpResponse */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__invoke</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
- To have this function you just need to add the option –invokable when creating the controller:
1 2 | php artisan make:controller ten_controller --invokable |
2. Resource Controllers
- Similar to normal Controller but when you create Resource Controllers , you will get the available functions index, create, show, edit, update, delete
1 2 | php artisan make:controller HomeController --resource |
- That is why the resource controller is very useful when you need to CRUD a certain resource. In addition, when declaring the resource controller, you do not need to create each path to each function, just use the resource .
Routes
- Once you have the controller , of course there must be something to lead there. Looking at the title, you already know what it is.
- To declare routes , you need the routes . directory
- Here you will see 4 files but you only need to pay attention to 2 files api.php and web.php .
- With api.php you will define the
api
here. And web.php to define the routes on the web path.
1. Methods in Routes
- In laravel support methods:
1 2 3 4 5 6 7 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token variable">$uri</span> <span class="token punctuation">,</span> <span class="token variable">$callback</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token variable">$uri</span> <span class="token punctuation">,</span> <span class="token variable">$callback</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">put</span> <span class="token punctuation">(</span> <span class="token variable">$uri</span> <span class="token punctuation">,</span> <span class="token variable">$callback</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">patch</span> <span class="token punctuation">(</span> <span class="token variable">$uri</span> <span class="token punctuation">,</span> <span class="token variable">$callback</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">delete</span> <span class="token punctuation">(</span> <span class="token variable">$uri</span> <span class="token punctuation">,</span> <span class="token variable">$callback</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">options</span> <span class="token punctuation">(</span> <span class="token variable">$uri</span> <span class="token punctuation">,</span> <span class="token variable">$callback</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- Where $url: route path and $callback : is an action to be performed.
2. Optional parameter
- You can also pass parameters in the URL by placing them between {} :
1 2 3 4 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'user/{id}'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$id</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"ID của user là : "</span> <span class="token operator">.</span> <span class="token variable">$id</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- Of course you can also pass multiple parameters on a URL, not just one:
1 2 3 4 5 6 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'user/{id}/{name}/{comment}'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$id</span> <span class="token punctuation">,</span> <span class="token variable">$name</span> <span class="token punctuation">,</span> <span class="token variable">$comment</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"ID của user là : "</span> <span class="token operator">.</span> <span class="token variable">$id</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"<br>Tên của user là : "</span> <span class="token operator">.</span> <span class="token variable">$name</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"<br> Comment của user: "</span> <span class="token operator">.</span> <span class="token variable">$comment</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
3. resource routes
- As mentioned above in the controller section, its effect is very simple, instead of you having to declare a bunch of routes , you just need to declare 1 routes for all of them:
1 2 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">resource</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'home'</span> <span class="token punctuation">,</span> <span class="token class-name static-context">PostController</span> <span class="token operator">::</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- You will get the respective routes:
4. Route name
- As you can see above the image has a column of route name , then to declare the name of a route, you just need to:
1 2 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'/post'</span> <span class="token punctuation">,</span> PostController@show <span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
5. Group routes
- You can group multiple routes with similar behavior into one group:
1 2 3 4 5 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'admin/posts'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@index'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'admin/posts/create'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@create'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'admin/posts/store'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@store'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'admin/posts/{id}/edit'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@edit'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- Wall:
1 2 3 4 5 6 7 8 9 | <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">group</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'prefix'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'admin'</span> <span class="token punctuation">]</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 class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@index'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts/create'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@create'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts/store'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@store'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts/{id}/edit'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@edit'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name static-context">Route</span> <span class="token operator">::</span> <span class="token function">patch</span> <span class="token punctuation">(</span> <span class="token string single-quoted-string">'posts/{id}'</span> <span class="token punctuation">,</span> <span class="token string single-quoted-string">'PostController@update); Route::patch('</span> posts <span class="token operator">/</span> <span class="token punctuation">{</span> id <span class="token punctuation">}</span> <span class="token string single-quoted-string">', '</span> PostController@destroy' <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> |
- Of course, the same Controller is fine.
Conclusion
- This article introduces you to the basics of creating a controller and how to call that controller via routes .
- Hope they will be of help to everyone.