Route thực hiện chức năng định tuyến đến những controller cụ thể dựa trên yêu cầu từ người dùng. Khác với các PHP framework khác, router chỉ đóng vai trò điều hướng đến controller và action thì trong Laravel, Router có thể hoàn toàn đứng độc lập, tức là khi yêu cầu (request) đi qua router, router có thể đáp ứng (response) về kết quả luôn mà không cần phải đi đến controller. Ngoài ra thì Router còn chỉ định cụ thể các loại request nào, request có thông qua http hay https hay không,... Chúng ta sẽ đi tìm hiểu cụ thể về Router trong Laravel.
Các router trong Laravel được định nghĩa trong file app/routes.php, router đơn giản nhất trong Laravel bao gồm một chỉ định URLvà một hàm callback, ví dụ sau giúp các chúng ta dễ hình dung hơn:
- Get Route
Ví dụ: Route::get(‘/’, function(){
return ‘Hello World’;
});
- Post Route
Ví dụ: Route::post(‘product/add’, function(){
return ‘Add new product’;
});
- Nhiều loại Request khác nhau
Ví dụ: Route::any(‘product’, function(){
return ‘Any request’;
});
- Request phải thông qua https
Ví dụ: Route::get(‘product’’, array(‘https’, function(){
return ‘HTTPS Request’;
}));
Giả sử muốn truyền vào một id trên URL, chúng ta sẽ làm như sau:
Router::get(‘product/{id}’, function($id){
return ‘Product ’. $id;
});
Nếu muốn là id chúng ta truyền vào có thể không cần thiết, thì chúng ta làm như sau:
Router::get(‘product/{alias?}’, function($alias = null){
return $alias;
});
Giả sử chúng ta muốn truyền id vào, và nếu không có thì chúng ta sẽ thiết lập nó một giá trị mặc định nào đó như sau:
Router::get(‘product/{id?}’, function($id = 0){
return $id;
});
Bây giờ chúng ta sẽ đến với các route có sử dụng biểu thức hợp lệ (Regular Expression), đây là một nhu cầu dường như có trong tất cả các nền tảng PHP. Ví dụ, muốn id truyền trên url xuống chỉ có chứa số từ 0-9:
Router::get(‘product/{id}’, function($id){
return $id;
})
->where(‘id’, ‘[0-9]+’);
Riêng phần này, phải hiểu về biểu thức hợp lệ (Regular Expression) thì mới có thể sử dụng được, tuy nhiên đối với các request thông thường thì chúng ta chỉ cần biết sơ qua một vài mẫu là đủ rồi, ví dụ một alias chỉ chứa các chữ cái thường, chữ số và dấu gạch ngang, chúng ta chỉ cần:
Router::get(‘product/{alias}’, function($alias){
return $alias;
})
->where(‘alias’, ‘[a-z][a-z0-9-][a-z]+’);
Chúng ta cũng có thể truyền nhiều tham đối cùng một lúc như sau:
Router::get(‘product/{id}/{alias}’, function($id,$alias){
return $id . ‘ ‘ .$alias;
})
->where(array(‘id’ => ‘[0-9]+’, ‘alias’ => ‘[a-z]+’);
Đặt tên cho các Route
Chúng ta có thể đặt tên cho các route, để có thể sử dụng lại khi chuyển (redirect) đến route, thực hiện như sau:
Route::get('product/add', array('as' => 'add', function()
{
//…
}));
Hay chỉ định route đến controller:
Route::get('product/add',array('as'=>'add', 'uses'=>'ProductController@add'));
Sau đó giả sử chúng ta muốn chuyển (redirect) thì chúng ta chỉ cần sử dụng:
$url = URL::route('add');
$redirect = Redirect::route('add');
Nhóm các Route
Chúng ta có thể nhóm các route lại với nhau thông qua phương thức group:
Route::group(array('before' => 'auth'), function()
{
Route::get('/', function()
{//…
});
Route::get('user/profile', function()
{//…
});
});
» Tin mới nhất:
» Các tin khác: