Hi các bạn, chúng ta sẽ tiếp tục với PHP Laravel Controller cơ bản tới nâng cao nhé
Như các bạn đã biết trong mô hình MVC Model-View-Controller thì Controller đóng vai trò chủ chốt, là cầu nối giữa Model và View
Chúng ta hiểu đơn giản là Controller là nơi gọi hàm từ Model, và sau đó xuất tất cả ra View thôi
Vậy Controller trong Laravel như thế nào? Cùng tìm hiểu nhé 😀
Mục lục – PHP Laravel Controller cơ bản:
- Tạo Controller cơ bản
- Các phương thức trong Controller
- Middleware trong Controller
- Phương thức Injection
1/ Tạo Controller cơ bản
Chúng ta có nhiều cách tạo Controller khác nhau, nhưng đa số tạo bằng tay sẽ là nhanh và gọn nhất.
Tạo Controller bằng tay
Thư mục Controller: app\Http\Controllers
Một số nguyên tắc để tạo Controller cần nhớ:
- Tên Class của Controller cũng là tên file (ví dụ với class TestController thì ta fải tạo file TestController.php)
- Đều phải kế thừa từ lớp Controller
- Tất cả file Controller đều fải tạo ở app\Http\Controllers
Ví dụ mình tạo file TestController.php thì nội dung File mình như sau:
<?php namespace App\Http\Controllers; class TestController extends Controller { // Do something }
Các bạn sẽ thấy tên file + tên class của mình sẽ trùng nhau, và thế 1 controller đã dc tạo ra.
Tạo RESTful Controller qua composer
Đây là cách thứ 2, tạo bằng lệnh trong composer, nhanh gọn và nó sẽ tạo cho ta một Controller RESTful
RESTful là sao? Có nghĩa nó sẽ ghi sẵn các phương thức luôn cho mình, trong đó có phương thức:
- index
- create
- store
- show
- edit
- update
- destroy
Mục đích cũng chỉ để dễ quản lý với Route 😀
Lệnh tạo Controller qua composer:
php artisan make:controller <Tên_Controller> // ví dụ php artisan make:controller TestController
Cách nào thì có thể tạo ra nhiều phương thức quá khiến các bạn ko thích, nếu ko thích thì cứ ưu tiên tạo bằng tay nhé 😀
2/ Phương thức trong Controller
Controller cũng chỉ là một đối tượng(class), ta có thể tạo các phương thức tùy ý kèm theo các keyword public, private, protected.
Nhưng để Routes có thể sử dụng dc hàm đó thì các bạn nhớ xài public nhé
Một function đơn giản:
public function showHome() { return view('home'); }
Các bạn có thể tạo nhiều phương thức khác nhau tùy ý nhé, mà nhớ Controller chỉ xài dc khi bạn đặt public nhé :v
3/ Middleware trong Controller
Middleware chỉ sử dụng khi các bạn cần đụng tới Authenticate (quyền truy cập khi đăng nhập)
Và để khai báo Middleware, các bạn nên khai báo ở hàm khởi tạo của Controller
Ở Laravel 5.0.x đã khởi tạo sẵn cho chúng ta 2 middleware mặc định là auth và guest
Nghĩa là:
- auth: nếu user đã logged thì mới truy xuất dc Controller đó, ko thì sẽ bị redirect qua trang khác
- guest: nếu user chưa logged thì mới truy xuất dc Controller đó
Bạn cũng có thể tạo thêm middleware custom cho mục đích của bạn, nhưng thật sự 2 middleware này là quá đủ rồi 😀
Ví dụ trong HomeController.php mặc định của Laravel như sau:
<?php namespace App\Http\Controllers; class HomeController extends Controller { public function __construct() { $this->middleware('auth'); } // còn nữa bên dưới
Có nghĩa là chỉ khi đăng nhập rồi, bạn mới truy xuất dc, còn ko thì nó sẽ đưa bạn qua trang đăng nhập
Khá đơn giản fải ko nào 😀
Mục đích của Middleware sẽ giúp cho chúng ta kiểm soát dc ng` dùng đăng nhập mới vào dc 1 page đặc biệt nào đó, ko fải ai cũng vào dc.
4/ Method Injection – Phương thức Injection
Đây là một trong những cái hay của Controller Laravel, giúp bạn có thể truyền vào các Class đặc biệt vào method
VD để get dc ?key=search thì ta sẽ đụng sơ tới Request(bài sau mình sẽ nói rõ hơn) như sau ở Controller
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; class UserController extends Controller { public function doSearch(Request $rq) { $keyword = $rq->get('key'); // do search... } }
Như bạn thấy, ở Controller mình chỉ cần gọi đơn giản như sau:
Route::get('/search', 'UserController@doSearch');
Mình đã có thể dễ dàng lấy ra dc keyword mà người dùng nhập để search dữ liệu
Bạn cũng có thể Inject các class khác nhau như Request, Input, Get, User,… khá hay fải ko nào
Bài sau: PHP Laravel Database Migration
Tìm hiểu thêm tại: https://laravel.com/docs/5.0/controllers
Các bài học Laravel cũ: http://sethphat.com/sp-tag/laravel
Chúc các bạn học tốt bài PHP Laravel Controller cơ bản.
Cám ơn các bạn đã theo dõi nha 😀