Route trong Laravel hiểu nôm na là một tuyến đường, một đường dẫn đưa đến một trang nào đó trong project của bạn, hoặc một đường dẫn thực hiện một công việc nào đó trong dự án Laravel của bạn.
Thay vì thông thường bạn sử dụng php thuần đường dẫn của bạn sẽ lấy tên trang làm đường dẫn. Ví dụ: blogcongnghe.tronghao.site/dang-nhap.php. Trong laravel không như vậy, laravel dùng route để định nghĩa đường dẫn. Ví dụ: blogcongnghe.tronghao.site/login. Bạn thấy đấy không hề có tên tệp tin trong đường dẫn.
Laravel có nhiều loại route như: get, post, put, patch, delete, options; đây là những loại route cơ bản của laravel nó có cấu trúc như sau:
Route::get('/'. function () { return view('welcome'); });
Ngoài ra còn 2 cấu trúc đặc biệt là match và any.
Route::match(['get', 'post'), 'tronghao', function(){ return 'Hao'; }); Route::any('hao', function(){ return 'Trong'; });
2 route đặc biệt trong laravel nữa là redirect và view:
Với redirect cần lưu ý là ở tham số thứ hai không sử dụng / nha.
Route::redirect('/do', 'tronghao'); // lưu ý không / ở tham số thứ hai Route::view('dotronghao', 'tronghao'); Route::view('dotronghao2', 'tronghao2', ['name' => 'Hao']);
Đến đây có thể các bạn khựng lại khi không hiểu Controller là gì. Mình có viết bài về Controller này các bạn xem bai viết Controller và View trong Laravel nhé.
Route::get('user/{id}', 'UserController@show');
Nếu như Class controller được nằm trong thư mục con của thư mục controller thì phải gọi cả thư mục đó nữa. Ví dụ App\Http\Controllers\Photos\AdminController thì ta gọi route như sau:
Route::get('foo', 'Photo\AdminController@method');
Đôi khi trên url chúng ta cũng cần những tham số truyền qua để lấy dữ liêu. Laravel hỗ trợ vô cùng phải gọi là tỉ mỉ un ớ, cùng xem nhé.
Route::get('name/{name}', function($name) { return $name; }); Route::get('ten/{name?}', function($name = null){ return $name; }); Route::get('name2/{name}', function($name) { return $name; })->where('name', '[A-Z]+');
where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Với những tham số có ràng buộc giống nhau, được sử dụng nhiều trong dự án của chúng ta chẳng lẽ mỗi khi khai báo route mới chúng ta lại ràng buộc lại? Laravel không để chúng ta cực như vậy âu, Laravel có hỗ trợ file AppServiceProvider.php được lưu tại App\Providers. Việc của bạn là khai báo các ràng buộc vào function boot là ok ngay! À quên nữa còn phải khai báo sử dụng Route: use Route; nữa nha!
Tên của route trong laravel rất hữu ích trong nhiều trường hợp, cú pháp khai báo bằng hàm name() như sau:
Route::get('name3/{name}', function($name){ return $name; })->where('name', '[A-z]+')->name('nameOfRoute'); Route::any('hao', function(){ return route('nameOfRoute', ['name' => 'Thu']); });
Khi sử dụng thì sử dụng hàm route(), kết quả trả về là url của route.
Ngoài ra còn một cách để đặt tên route đó là sử dụng từ khóa as.
//Để khai báo tên cho route, sử dụng từ khóa as : Route::get('user/profile', ['as' => 'profile', function () { // }]);
Route::group(['middleware'=>'guest', 'prefix'=>'nguoi-dung'), function(){ Route::get('trong', function(){ return 'Hao'; }); });
Như vậy, ở trên khi xài thì mình gọi như sau: http://localhost/lar6/nguoi-dung/trong lar6 là thư mục dự án của mình.
Fallback sẽ được gọi khi url không tồn tại, thường thì sẽ báo lỗi 404 nếu không có fallback nhưng nếu có thì sẽ gọi hàm này đấy.
Route::fallback(function(){ return 'Khong ton tai trang'; });
Bạn sử dụng các lệnh sau để lấy thông tin nhé!
$route = Route::current(); $name = Route::currentRouteName(); $action = Route::currentRouteAction();
Như vậy, mình đã hướng dẫn các bạn tất tần tật về route trong laravel như thế nào rồi, các bạn có thể tìm hiểu thêm về controller và view trong laravel như thế nào nhé.