Controller trong laravel

Controller trong laravel
Chắc hẳn các bạn còn nhớ đến mô hình MVC của laravel và controller là 1 phần trong đó, controller là phần sử lý trung tâm, nó nhận lệnh từ người dùng gửi lệnh đến các model để cập nhật dữ liệu và truyền lệnh đến view để cập nhật giao diện hiển thị.

Hôm nay mình sẽ giới thiệu với các bạn về controller trong laravel

Trước khi đi vào nội dung bài viết mình muốn các bạn chuẩn bị kiến thức về route để hiệu quả hơn nhé

Chắc hẳn các bạn còn nhớ đến mô hình MVC của laravel và controller là 1 phần trong đó, controller là phần sử lý trung tâm, nó nhận lệnh từ người dùng gửi lệnh đến các model để cập nhật dữ liệu và truyền lệnh đến view để cập nhật giao diện hiển thị.

Khởi tạo controller:

Mở terminal và gõ dòng lệnh:   

php artisan make:controller ControllerName

Controller vừa tạo sẽ được lưu trữ ở: 

app/Http/Controllers/ControllerName.php

Và các bạn phải lưu ý việc đặt tên controller phải giống với tên class trong file controller đó, và file controller phải đặt đúng trong thư mục controller

Sử dụng controller:

Quay lại với file route ở bài học trước cách để tạo một đường dẫn đến file home.blade.php:

Route::get('home', function () {
    return view('home');
});

Với controller bạn có thể thực hiện hành động đó:   

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


class ControllerName extends Controller
{
    public function index()
    {
      return view('home');
    }
}

Khi đó nội dung file route sẽ thay đổi:

Route::get('/', [ControllerName::class, 'index']);

Resource Controller:

Trong laravel việc sử dụng các router post, get, group để gọi đến một hành động trong controller là không thể tránh khỏi. Vậy thử suy nghĩ nếu cứ mỗi lần chúng ta làm việc với các hành động thêm, xoá, sửa dữ liệu lại phải viết thêm một dòng route, việc đó có thể khiến file route trở nên dài và khó kiểm soát hơn. Vì vậy resource controllers được sinh ra để giúp chúng ta cải thiện việc đó.

Khởi tạo:

php artisan make:controller UserController --resource

File controller được sinh ra sau đó có nội dụng:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController 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)
    {
        //
    }
}

Việc tiếp theo chúng ta phải làm là khai báo route cho controller trên:

Route::resource('users', 'UserController');

   với dòng khai báo trên bạn đã khai báo cho toàn bộ hành động trong UserController

Còn nếu bạn chỉ muốn khai báo 1 vài hành động trong UserController bạn có thể thực hiện theo cú pháp:

Route::resource('users', 'UsersController')->only([
    'index', 'show'
]);

với hàm only() chỉ sử dụng các hành động trong mảng bạn truyền vào 

Hoặc

Route::resource('users', 'UsersController')->except([
    'create', 'store'
]);

   với hàm excepet() sẽ sử dụng tất cả ngoại trừ các hành động được truyền vào

Các hành động được sử lý bởi resource controller:

Phương thức URL Hành động route
GET /users index users.index
GET /users/creste create users.create
POST /users    store users.store
GET /users/{user} show users.show
GET /users/{user}/edit edit users.edit
PUT/PATCH /users/{user} update users.update
DELETE /users/{user} destroy  users.destroy

Hoặc bạn có thể thay đổi tên route bằng cú pháp:

Route::resource('users', 'UsersController')->names([
    'index' => 'users.name'
]);

Qua bài vừa rồi hi vọng có thể giúp bạn hiểu hơn về controller trong Laravel. Nhớ đừng quên theo dõi hoclaravel.vn để xem được những bài viết bổ ích hơn nữa nhé.

Các bạn cũng có thể để lại câu hỏi nếu có bất cứ thắc mắc nào ở phần bình luận phía dưới.

Đào Hữu Hải

Dev cùi tập tành làm nhà văn :D

Để lại bình luận