học laravel 5

Bài 3 : Laravel 5: Routes , Controllers, Views

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 :

Route::get('/', 'WelcomeController@index');

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

Route::get('/', 'WelcomeController@index');

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

http://localhost/laravel-5/public

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

public function index()
{
    return view('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:

Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé!

Route::get('/contact', 'WelcomeController@contact');

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

public function contact(){
    echo "Đây là trang contact";
}

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

http://localhost/laravel-5/public/contact

sẽ thấy nội dung :

Đây là trang contact

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

Đây là trang contact

about.php

Đây là trang about

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

Route::get('/about', 'WelcomeController@about');

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

public function contact(){
    return view('pages.contact');
}

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

public function about(){
    return view('pages.about');
}

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

http://localhost/laravel-5/public/contact
http://localhost/laravel-5/public/about

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

Đây là trang contact
Đây là trang about

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 :

return view('pages/contact');

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

 

Có ích

học laravel 5

Bài 8 : Form trong Laravel 5

Ở bài trước, mình đã hướng dẫn cho các bạn về mô hình MVC trong …

42 bình luận

  1. anh ơi, phiên bản mới nhất có khác gì không ạ? em vào thấy không có file routes.php

  2. 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.

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

  4. 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.

  5. 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 :(((

  6. 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

  7. 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?

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

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

  10. 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”

  11. 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 !

  12. Bai viet rat de hieu. thank Ad

  13. 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.

  14. 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 :))

  15. 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

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

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

  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 Bé 2 Hủy

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 *