Bài 7: Tìm hiểu về Controller trong Laravel

Bài 7: Tìm hiểu về Controller trong Laravel

Trong mô hình MVC thì project sẽ được chia ra làm 3 phần (Model,View,Controller) và trong Laravel framework cũng chia làm 3 phần như vậy. Controller hoạt động như một trình điều hướng truy cập giữa View và Model.

1. Tạo controller trong Laravel

Để tạo controller trong Laravel cũng phải có một số quy tắc sau:

  • Controller phải được đặt trong đường dẫn App\Http\controllers
  • Tên của controller phải giống với tên class trong file controller đó.
  • Class controller (do bạn tạo) phải extends (kế thừa) từ Controller (Chữ C phải viết hoa).

Để tạo controller chúng ta dùng lệnh sau:

php artisan make:controller controller-name

Hoặc

php artisan make:controller controller-name --resource
  • controller-name là tên controller các bạn muốn tạo.

Sau khi tạo thì controller sẽ nằm trong app/Http/Controllers. Sau khi tạo thì Controller sẽ có cấu trúc như sau:

* Nếu dùng lệnh không có --resource

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class controllername extends Controller
{
    //
}

 

* Nếu dùng lệnh có --resource

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class controllername extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

2. Gọi Controller trong Route

Để gọi Controller trong Route chúng ta viết trong file Route (route/web.php) theo cấu trúc như sau:

Route::get('URI','[email protected]');
  • URI: Liên kết khi gõ trên trình duyệt
  • controller: Tên Controller chúng ta đã tạo
  • action: Các phương thức trong controller

Ví dụ: Chúng ta có controller home với nội dung như sau:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index(){
       echo "Đây là trang Home";
    }
}

Để gọi tên Controller home chúng ta và method index chúng ta viết trong Route như sau:

Route::get('/home','[email protected]');

Như vậy khi chúng ta gõ trên trình duyệt: http://example.com/home thì trên màn hình sẽ hiển thị:

Đây là trang Home

3. Sử dụng Middleware trong Controller

Như đã giới thiệu ở bài trước Bài 6: Tìm hiểu về Middleware trong Laravel mình đã giới thiệu cách sử dụng Middleware trong Route, trong bài này chúng ta sẽ tiếp tục tìm hiểu cách dùng Middleware trong Controller.

Để gọi Middleware trong Controller các bạn tạo thêm một function construct trong Controller và gọi Middleware trong function này, ví dụ như sau:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function __construct() {
      $this->middleware('auth');
   }
}
  • Lưu ý: Nếu đã gọi Middleware trong Route thì không cần gọi trong Controller nữa.

4. Resource Controllers

Như ở phần 1 tạo controller thì chúng ta có 2 lệnh để tạo Controller là chạy lệnh có hoặc không có --resource. Nếu chúng ta có thêm tham số --resource thì Laravel sẽ tạo sẵn controller và kèm theo các action có sẵn: index, create, store, show, edit, update, destroy.

Chúng ta có thể gọi đến các action này trong Route tùy theo mục đích sử dụng (Thêm, sửa, xóa), dưới đây là bảng hành động được xử lý bởi các method này:

Verb Path Action Route name
       
GET /my index my.index
GET /my/create create my.create
POST /my store my.store
GET /my/{my} show my.show
GET /my/{my}/edit edit my.edit
PUT/PATCH /my/{my} update my.update
DELETE /my/{my} destroy my.destroy

5. Truyền tham số trong action Controllers

- Để truyền tham số trong action Controllers thì nó hoàn toàn giống PHP thuần, các bạn có thể xét ví dụ sau để hiểu rõ hơn:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index($name, $age){
    	echo "Xin chào $name, $age tuổi";
    }
}

Tiếp theo chúng ta tạo một route có truyền tham số cho nó như sau:

Route::get('home/{name}/{age}','[email protected]')->where(['name'=>'[a-zA-Z]+','age'=>'[0-9]+']);

Khi đó chúng ta truy cập trên trình duyệt theo link: http://example.com/A/18 trình duyệt sẽ hiển thị như sau:

Xin chào A, 18 tuổi

 

Đối với cách sử dụng where trong Route các bạn có thể xem lại bài sau: Bài 5: Sử dụng RegEx kiểm tra các tham số truyền vào trong Route

Qua phần chia sẻ cơ bản về controllers của mình ở trên thì mình rất hy vọng là mọi người có và nắm được cái nhìn tổng quan cũng như là cách sử dụng Controllers cơ bản trong Larvel.

Post Comment