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 :
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:
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
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
phiên bản mới thì nó là đây e nhé : routes/web.php
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.
bài 4 nằm ở đâu vậy bạn ơi, hay quá (y)
Ở cuối bài ghi bài kế tiếp đó 🙂
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.
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 :(((
Giống mình! không có file WelcomeController
Có thể bản laravel mới nhất là 5.4 đã bỏ đi file này rồi nhé
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
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?
Bản 5.1 nó lại thay đổi file routes.php nữa rồi
mih lm bang xampp va chay tren windown, lm jog vay nhug no ko chay, p co the them vao video
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”
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 !
ok bạn. Chủ yếu là bạn lên trang chủ của nó đọc tài liệu và nghiền ngẫm nhé 🙂
Bai viet rat de hieu. thank Ad
cám ơn bạn nhé
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.
ừ, cám ơn góp ý của bạn ha. Mình sẽ khắc phục 🙂
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
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
yep, thank bạn
Cảm ơn bạn vì bài viết và video rất tuyệt vời
Hay quá. 😀
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
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
T đọc không hiểu gì hết, cmt cho vui :v
=))
The requested URL /laravel/public/contact was not found on this server.
tui chay duoc ma hoac ong thu go php artisan serve thu xem sao
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
ok bạn 🙂
Anh giải thích rất dễ hiểu :3
thank e 🙂
Chia sẻ chứ không phải chia sẽ bạn ơi.
à há, cám ơn bạn 🙂