Laravel TDD Unit Testing

PHP Laravel Controller cơ bản và nâng cao

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:

  1. Tạo Controller cơ bản
  2. Các phương thức trong Controller
  3. Middleware trong Controller
  4. 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ớ:

  1. 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)
  2. Đều phải kế thừa từ lớp Controller
  3. 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à authguest

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', '[email protected]');

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 😀

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook