Nội dung
Route và controllers trong laravel( phần 1)
Cơ bản về route
Ở bài tìm hiểu về route và controllers trong laravel, mình sẽ chia làm 2 phần để các bạn dễ nắm được kiến thức chính. Chúng ta đi phần thứ nhất, route trong laravel.
Đúng với tên gọi của nó, route thực hiện chức năng định tuyến đến các controllers cụ thể cho các request từ phía người dùng. Hiểu đơn giản nó chính là 1 cách viết lại đường dẫn(rewrite URL) của ứng dụng.
Trong laravel, route được đặt ở thư mục app/Http/routes.php
Cú pháp khai báo route
Route::method('URI','Function callback');
Với file routes.php
của mình như trên thì
Route::get('/', function () { return view('welcome'); });
phương thức ở đây là get, function callback là gọi tới file view có tên welcome, file này nằm ở thư mục resources/views/welcome.blade.php
Khi các bạn truy cập vào trang chủ của project hiện tại. Với mình là dinhdanh.koding.io:8000 thì nó sẽ triệu gọi đến file view trên. (máy chủ koding của mình không bật nên có thể các bạn sẽ không truy cập được từ link, hãy thử với project của chính mình).
Các bạn nhớ mở port cho server khi chạy project nhé.
cd blog php artisan serve --host 0.0.0.0
Khai báo route với nhiều phương thức:
Route::match(['method_1', 'method_2', 'method_n'], 'URI', 'Function callback');
Hoặc khai báo route với bất kỳ method nào:
Route::any('URI', 'Function callback');
Route có tham số
Khi cần lấy thông tin từ url như id của user, id của 1 bài viết…, bạn có thể tự định nghĩa tham số trong route
Route::get('user/{id}', function ($id) { return 'Your id is: '.$id; }); //user/{id} là tham số sau đường dẫn gốc,
Các bạn hãy thử truy cập theo địa chỉ dinhdanh.koding.io:8000/user/1 trên trình duyệt để xem kết quả nhé. Nhớ thay địa chỉ trang koding của mình thành của các bạn. Tham số id là tùy chọn, nhập bao nhiêu thì sẽ trả về bấy nhiêu.
Ngoài ra, các bạn còn có thể khai báo với nhiều tham số:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { return 'Bạn đang đọc comment '.$commentId.' ở bài viết số '.$postId; });
Chú ý rằng tham số của route không được chứa ký tự gạch ngang(-). Do đó chúng ta sẽ dùng dấu gạch dưới để thay thế.
Nhóm route
Nhóm route cho phép bạn chia sẻ các thuộc tính của route, như middleware hay namespace… Để khai báo các chia sẻ này, ta viết vào một mảng và đặt vào tham số thứ nhất của phương thức Route::group
, ví dụ:
//Route middware sử dụng từ khóa middleware(bắt buộc) Route::group(['middleware' => 'auth'], function(){ Route::get('/', function(){ // Uses Auth Middleware }); Route::get('user/profile', function(){ // Uses Auth Middleware }); }); //Route namespace sử dụng từ khóa namespace(bắt buộc) //Chú ý là route tự hiểu controller chung AppHttpControllers //nên không cần phải ghi lại đường dẫn này Route::group(['namespace' => 'Admin'], function(){ // Controllers Within The "AppHttpControllersAdmin" Namespace Route::group(['namespace' => 'User'], function(){ // Controllers Within The "AppHttpControllersAdminUser" Namespace }); }); //Prefix có thể dùng để đặt tiền tố cho một nhóm URI. Route::group(['prefix' => 'admin'], function(){ Route::get('users', function () { // Matches The "/admin/users" URL }); Route::get('user_group', function(){ // Dùng dấu gạch dưới, không dùng gạch ngang ở tên tham số của route // Matches The "/admin/user_group" URL }); }); //Gom nhóm route trên sub domain với từ khóa domain Route::group(array('domain' => '{account}.myapp.com'), function(){ Route::get('/', function($account, $id) { // ... return Redirect::to('https://www.myapp.com'.'/'.$account); }); });
Ở trong phần comment của code cũng đã giải thích rõ đối với middware và namespace rồi nên mình sẽ không nhắc lại. Khá là dễ hiểu đúng không. Ở bài này mình chỉ giới thiệu về 1 số route cơ bản và hay dùng, phần còn lại các bạn có thể tham khảo thêm từ trang document của laravel. Ở phần tiếp theo của bài tìm hiểu route và controllers trong laravel, mình sẽ nói về controllers trong laravel. Mời các bạn đón đọc.
Nếu thấy không hiểu chỗ nào các bạn hãy mạnh dạn hỏi bằng cách để lại comment ở khung phía dưới.