Tiếp tục chuỗi seri học Laravel 5, bài hôm nay mình tiếp tục giới thiệu với các bạn về Routes, Controllers, Views trong Laravel 5. Nếu các bạn đã làm quen với Laravel 4 thì các khái niệm này không còn lạ lẫm gì nữa, về cơ bản thì Routes, Controllers, Views ở Laravel 5 không khác gì so với Laravel 4, có khác ở đây chỉ là cấu trúc sắp xếp thư mục.

Sau khi đã cài đặt xong laravel 5, thư mục app của chúng ta sẽ có cấu trúc như sau :

laravel-5-app
cấu trúc thư mục app trong laravel 5

Nếu để ý, các bạn sẽ thấy folder Controllers trong Laravel 5 sẽ nằm trong thư mục Http cùng cấp với file routes.php. Ngoài ra các vị trí và cấu trúc folder khá là khác so với Laravel 4. Nhưng các bạn đừng quá bận tâm về điều này, vì theo nghiên cứu của mình thì về bản chất routing, views, controllers vẫn không thay đổi nhiều. Những điều khác biệt thì chúng ta đi sâu hơn vào các bài tới sẽ nắm kĩ hơn.

Vào vấn đề chính nào. Let’s go !

Có thể bạn quan tâm: Tặng coupon 40% giá trị khóa học tạo website với Laravel 5

Routes, Controllers, View trong Laravel 5

1. Routes

Định nghĩa mối quan hệ giữa các đường dẫn (url), các liên kết (link) . Khi một liên kết được tạo ra bằng cách sử dụng tên của routes, thì một định danh liên kết thống nhất sẽ được tạo ra bởi laravel. (xem lại bài giới thiệu về Laravel)

Nói nôm na ở đây chúng ta có thể hiểu đơn giản thì routes chính là 1 cách để bạn viết lại đường dẫn của ứng dụng (giống như htaccess trong các website truyền thống) và laravel có thể hiểu được cách viết này và sử dụng nó để gọi các đối tượng, phương thức cần thiết.

Routes trong laravel được quy định trong file app -> Http -> routes.php

Mở file này lên bạn sẽ thấy đoạn mã như sau :

2. Controllers

Thay vì định nghĩa tất cả các yêu cầu trong 1 file routes.php, thì Controller tổ chức nhóm tất cả các logic này trong class Controller để tiện xử lý. Vị trí của Controller là app/Http/Controllers

Quay lại đoạn mã ở trên

Điều này mang ý nghĩa là khi người dùng truy cập vào đường dẫn

thì Laravel sẽ gọi tới Controller có tên là WelcomeController (nằm trong app -> Http -> Controllers -> WelcomeController.php),  với phương thức là index (ngăn cách giữa controller và phương thức của nó là dấu @).

3. Views

Views chứa các mã html dùng để hiển thị nội dung được chỉ định bởi Controllers, vị trí của View trong ứng dụng Laravel là  resources/views

Tiếp tục mục 2. phương thức index trong controller WelcomeController này sẽ tiếp tục gọi View là welcome

File view welcome này nằm trong thư mục resources -> views -> welcome.blade.php, chịu trách nhiệm hiển thị ra nội dung theo chủ ý của controller, mà ở đây chính là nội dung bạn thấy như dưới đây khi cài đặt xong Laravel ở bài trước:

cài đặt laravel 5
view hiển thị dữ liệu từ WelcomeController.php

4.Các ví dụ

Ví dụ a :

Trong ví dụ này, chúng ta sẽ edit lại file routes.php và thêm 1 đoạn mã như sau:

Trong file WelcomeController.php, ta thêm function gọi là contact()

Giờ thì các bạn vào trình duyệt, gõ địa chỉ :

sẽ thấy nội dung :

Rất dễ hiểu đúng không nào, quy trình là Routes gọi phương thức của Controllers, hiển thị ra Views.

Ví dụ b :

Trong thư mục views, các bạn tạo 1 folder tên pages và tạo 2 file đặt tên là contact.php và about.php, nội dung của 2 file này đơn giản lần lượt như sau :

contact.php

about.php

Tiếp đến trong file routes.php bạn thêm 1 đoạn route mới dành cho trang about như sau :

Trong file WelcomeController.php, bạn sửa lại function contact() 1 chút như sau :

và thêm 1 function mới tên là about() dành để gọi view about

Tiếp đến, vào trình duyệt gõ lần lượt 2 địa chỉ như sau :

sẽ có các kết quả lần lượt là :

Thật đơn giản đúng không nào, từ ví dụ trên, các bạn sẽ để ý thấy là khi ta đặt các file contact.php, about.php trong 1 thư mục là pages, thì các phương thức contact(), about() trong WelcomeController sẽ gọi các view contact.php, about.php từ thư mục pages và vào trong bằng dấu chấm (.). Bạn có thể thay thế dấu chấm (.) bằng dấu cách (/) như dưới đây đều được :

Mình dừng bài viết ở đây, chúc các bạn học tốt và chúc mừng năm mới 🙂

Gợi ý : Nếu như có một khóa học với giá cực rẻ, lại còn được tặng mã giảm giá 40%, học xong có khả năng đi làm ngay và được mình hỗ trợ tìm việc, bán sẽ tham gia chứ ? Nếu câu trả lời là có, mời bạn xem thông tin chi tiết về khóa học tại đây

 

Đánh giá bài viết

Mình là Hiếu.
Mình lập ra Kungfu PHP nhằm mục đích chia sẽ những gì mình biết đến với các bạn bao gồm các lĩnh vực như : tiền điện tử, kiếm tiền online, marketing, lập trình…
Hy vọng nơi đây là mái nhà chung để chúng ta có thể học tập và trao đổi với nhau, cùng nhau phát triển.
Chúc các bạn luôn vui !

Bạn có muốn tham gia nhóm thảo luận ICO tốt nhất ?

40 Comments Already

  1. chạy link:http://localhost/laravel-5/public/contact
    thì em dính lỗi này. GG mãi chưa mà chưa fix được.
    “ReflectionException in Container.php line 749:
    Class App\Http\Controllers\WelcomeController does not exist”
    Bác nào biết chỉ em với. ib teamview.

  2. bài 4 nằm ở đâu vậy bạn ơi, hay quá (y)

  3. php artisan make:controller ContactController –plain —————————- sao nó bị lỗi như thế này z AD
    [Symfony\Component\Console\Exception\RuntimeException]
    The “–plain” option does not exits.

  4. anh ơi sao em không tìm thấy WelcomeController (nằm trong app -> Http -> Controllers -> WelcomeController.php) nhỉ, em vào chỉ thấy thư mục Auth và file controller.php thôi :(((

  5. Sao lúc tạo controller mình gõ thêm –plain ở cuối nó lại báo “option not exists” nhỉ. Nếu xóa đi thì nó lại thông báo tạo controller thành công

  6. A ơi e chạy “php artisan” http://localhost:8000/contact thì chày tốt nhưng chạy localhost thường “http://localhost:81/php/laravel/public/contact” nó báo sai thì có sao k a?

  7. Bản 5.1 nó lại thay đổi file routes.php nữa rồi

  8. mih lm bang xampp va chay tren windown, lm jog vay nhug no ko chay, p co the them vao video

  9. anh ơi lúc em gõ lệnh tạo file ContactController.php như anh trong cmd thì nó hiện ra là “there are no comands defined in the “make” namespace ” là sao nhỉ :(((

    • bạn đã di chuyển (lệnh cd) vào thư mục laravel 5 chưa ? Nếu đã di chuyển vào rồi bạn gõ thử lệnh “php artisan” xem đã hoạt động tốt chưa. Nếu đã hoạt động thì gõ như vầy xem : “php artisan controller:make ContactController”

  10. Thanks ! bạn đã bỏ ra thời gian viết 1 bài hướng dẫn cụ thể ! nếu bạn có document nào về Laravel 5 có gì share cho mình nhé kienan91@gmail.com thanks bạn nhiều !

  11. Bai viet rat de hieu. thank Ad

  12. Video dài quá, nên gói gọn khoảng < 20 phút thôi bạn, với lại nên thu cả âm bạn nói gì sẽ rút ngắn video hơn.

  13. e thấy nếu mà có “Public” trong đường dẫn này /laravel-5/public/contact lúc đưa lên host thì có có public không ạ . còn muốn không cần gõ public thì phải làm sao ạ . Thanks Kungfu :))

    • bạn coi những bài sau sẽ thấy là mình có thể build server bằng php artisan serve nhé. Hoặc là chỉnh lại htaccess

  14. Bái này đoạn cuối bị sai chỗ:
    return view(‘contactshowlist.php’);

    Đúng phải lả:
    return view(‘contactshowlist’); //không có đuôi php thì mới chạy dc

  15. Cảm ơn bạn vì bài viết và video rất tuyệt vời

  16. Hay quá. 😀

  17. Kungfu PHP có cách nào loại bỏ thư mục public không.

    • co 1 cach duoc laravel de nghi do la thay doi duong dan document root trong apache config, tro duong dan thang toi thu muc public. Nhung neu ban dang dev laravel o local, thi ko nhat thiet phai remove public folder. Cach tot nhat la dung “php artisan serve”. Neu ban chua biet ve php artisan serve thi tham khao o nhung bai viet sau trong serial laravel 5 nhe : https://kungfuphp.com/category/laravel-framework-5

  18. Sao lai khong chay dc ban oi..
    The requested URL /laravel-5/public/contact was not found on this server.

    • Có thể là bạn đã làm sai một chỗ nào đó, làm cho routes contact không hoạt động. Bạn thử kiểm tra lại file controller xem, hoặc trong thư mục laravel-5, chạy lệnh php artisan serve. Sau đó vào đường dẫn : localhost:8000/contact thử xem

    • Vào file Apache..bỏ dấu # trước dòng này

      LoadModule rewrite_module modules/mod_rewrite.so

      Là ok nhé bạn

  19. T đọc không hiểu gì hết, cmt cho vui :v

  20. The requested URL /laravel/public/contact was not found on this server.

  21. Viết thêm insert , update,delete dữ liệu luôn đi anh? mình đã xem hết phần bài viết a đăng rồi

  22. Anh giải thích rất dễ hiểu :3

  23. Chia sẻ chứ không phải chia sẽ bạn ơi.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

loading...