Hướng dẫn Route::controller và Route::resource Trong laravel

Hướng dẫn Route::controller và Route::resource Trong laravel là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Hướng dẫn Route::controller và Route::resource Trong laravel sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và Laravel nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Ở bài trước mình có giới thiệu tổng quan về rout trong Laravel và  việc sử dụng các route post, get, any, ... để gọi đến 1 action của controller, nhưng nếu bạn có nhiều controller mà mỗi controller lại có nhiều action thì chẳng lẽ mỗi action ta viết 1 dòng Route::method() hay sao. Nên ở bài viết này mình sẽ giới thiệu và hướng dẫn sử dụng 2 route khá quan trọng trong laravel là Route::controller() và Route::resouce() có thể giải quyết vấn đề vừa nêu.

1. Route::controller trong laravel

Cú pháp sử dụng:

Route::controller($uri, $controller, $names);  //trong đó $names là một mảng quy định tên cho action trong controller, có thể có hoặc không. 

Ví dụ:

Giả sử bạn có controller là HomeController, controller này có 3 action khác nhau, nếu như theo bài trước thì cần phải viết 3 dòng cho 3 action của controller này. Nhưng nếu bạn sử dụng Route::controller() thì chỉ cần 1 dòng mà thôi:

Giả sử ta có 3 action như sau: File app/controllers/HomeController.php

<?php
    //Đây chỉ là một ví dụ nhỏ, bạn chưa cần để ý đến controller này nhiều
class HomeController extends Controller {
    public function getFirst(){
        return 'this is First action';
    }
    public function getSecond(){
        return 'this is Second action';
    }
    public function postThird(){
        return 'this is Third action';
    }
}

Bây giờ bạn mở file app/routes.php bạn thêm:

Route::controller('/controller','HomeController',['getFirst'=>'first','getSecond'=>'second','postThird'=>'third']);
/****************
trong đó:
/controller là uri
HomeController là controller sẽ hoạt động
['getFirst'=>'first','getSecond'=>'second','postThird'=>'third'] là một mảng chứa tên của các action của controller (tạm thời chưa cần quan tâm đến phần này).
 
**************/

Bây giờ bạn truy cập 3 vào 3 đường link:

http://tênmiềnảocủabạn/controller/first

http://tênmiềnảocủabạn/controller/second

http://tênmiềnảocủabạn/controller/third

Sẽ nhận được các kết quả tương ứng như sau: (nếu đường dẫn thứ 3 chỉ thông báo ra câu " Whoops, looks like something went wrong." thì bạn phải bật debug của laravel lên - mình đã nói đến ở cuối bài cấu trúc thư mục Laravel)

Hướng dẫn Route::controller và Route::resource Trong laravel

Hướng dẫn Route::controller và Route::resource Trong laravel

Hướng dẫn Route::controller và Route::resource Trong laravel

 

Tới đây bạn sẽ có hai câu hỏi thắc mắc như sau:

  • 2 cái đầu chạy ngon ơ sao cái cuối lại lỗi kỳ ta?
  • Nếu như thế thì làm sao biết action nào nhận method POST, action nào nhận method GET để làm việc?

Chắc hẳn đây là 2 câu hỏi mà các bạn đang thắc mắc đúng không nào! Các bạn nhìn lại file HomeController đi, có thấy điểm gì đặc biệt ở các action không nào, đó chính là tiền tố get hoặc post, Laravel dựa vào tiền tố này để phân biệt action nào nhận POST action nào sẽ nhận GET. Đó chính là lý do vì sao ở action postThird báo lỗi, bởi vì khi bạn truy cập trên thanh địa chỉ thì đó là phương thức GET.

2. Route::resource() trong laravel

Route này được laravel tạo ra nhằm mục đích chính là xây dựng RESTful (xây dựng Webservice), route này sẽ đi kèm với một RESTful controller. Là người mới làm quen với laravel hay php thì route này chưa có nhiều ý nghĩa.

Trong RESTful controller sẽ có các action cơ bản sau:

//hiển thị cả danh sách
index()
//thêm mới
create()
//lưu trữ một tài nguyên mới
store()
//hiển thị 1 tài nguyên theo tham số truyền vào
show($id)
//sửa 1 tài nguyên theo tham số truyền vào
edit($id)
//cập nhật 1 tài nguyên theo tham số truyền vào
update($id)
//xóa 1 tài nguyên
destroy($id)
//trong đó $id là tham số truyền vào

Để tạo 1 RESTful controller thì có 2 cách:

  • Cách 1 là tự tạo bằng tay file controller
  • Cách 2: sử dụng dòng lệnh của laravel hỗ trợ
//Cú pháp sử dụng:
php artisan controller:make "têncontroller" [tùy chọn]
/**************************
Ví dụ:
//tạo RESTful controller với tên DemoController có đầy đủ các action<br />
php artisan controller:make DemoController<br />
//tạo RESTful controller với tên DemoController chỉ có 2 action là index và show
php artisan controller:make DemoController --only=index,show
//tạo RESTful controller với tên DemoController có tất cả action ngoại trừ index
php artisan controller:make DemoController --except=index
*************************/

3. Lời kết

Tới đây ta đã thấy laravel thật tuyệt vời phải không, chỉ với 2 loại route này đã giúp ta giảm được kha khá công sức rồi đó. Nhưng trong laravel không chỉ có vậy, và trong bài tiếp theo mình sẽ giới thiệu tới các bạn 2 loại route cũng không kém phần quan trọng đó là Route::filer và Route::group, hãy đón đọc nhé.

Hy vọng với bài viết về Hướng dẫn Route::controller và Route::resource Trong laravel đã giải đáp giúp bạn phần nào về kiến thức lập trình Laravel. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!