1.Name Route để làm gì ?
-Đặt tên routes cho phép đặt tên thuận tiện cho việc gọi route khi chúng ta cần và các URL hoặc chuyển hướng cho các route cụ thể
-Có thể chỉ định một tên cho route bằng cách thêm name vào định nghĩa route
Route ::get(‘user/profile’ , function (){
//
})->name(‘profile’);
- để thuận tiện cho các URL hoặc chuyển hướng cho các định tuyến cụ thể. Ta có thể chỉ định một tên cho định tuyến bằng cách sử dụng khóa
as
khi tạo định tuyến:
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
- Bạn cũng có thể chỉ định tên cho hành động:
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
- Ngoài ra, thay vì chỉ định tên trong mảng định nghĩa route, bạn cũng có thể thêm phương thức name vào cuối route:
Route::get('user/profile', 'UserController@showProfile')->name('profile');
- Tạo url từ định tuyến đã đặt tên: Khi một một định tuyến đã được đặt tên, ta có thể sử dụng tên định tuyến đó để tạo url hoặc chuyển hướng url thông qua hàm
route
:
// Generating URLs...
$url = route('profile');
// Generating Redirects...
return redirect()->route('profile');
- Nếu định tuyến được đặt tên có tham số, thì ta có thể giải quyết bằng cách thêm đối số là mảng tương ứng:
Route::get('user/{id}/profile', function ($id) {
//
})->name('profile');
$url = route('profile', ['id' => 1]);
Route ::get(‘user/profile’ , function (){
//
})->name(‘profile’);
2. Prefix
Giả sử rằng các bạn muốn thêm tiền tố là admin
cho một nhóm các routes như này:
http://127.0.0.1:8000/admin/login
http://127.0.0.1:8000/admin/dasboard
http://127.0.0.1:8000/admin/products
chúng ta sẽ không đi viết từng từ admin
trước mỗi route mà trong Laravel nó đã hỗ trợ sẵn cho chúng ta làm điều này, để thiết lập cho một nhóm các routes chứa các tiền tố là admin
như trên thì các bạn sẽ dùng đến Route Prefix, mình sẽ làm một ví dụ như bên dưới :
Route::group(['prefix' => 'admin'], function(){
Route::get('/login', 'AuthController@login')->name('auth.login');
Route::get('/dasboard', 'HomeController@index')->name('home.dasboard');
Route::get('/products', 'ProductController@index')->name('products.index');
});
3. Closure
Một Closure (bao đóng :-s) về cơ bản giống như một Lambda, ngoài ra nó có thể truy cập các biến bên ngoài phạm vi mà nó được tạo ra.
Ví dụ:
// Create a user
$user = "Thỏ 7 màu";
// Create a Closure
$hello = function() use ($user) {
echo "Hello $user";
};
// Greet the user
$hello(); // Returns "Hello Thỏ 7 màu"
Như chúng ta có thể thấy ở trên, Closure có thể truy cập biến $user
. Bởi vì nó đã được khai báo trong các điều khoản sử dụng (use ($user)
) của định nghĩa hàm Closure.
Nếu chúng ta thay đổi biến $user
ban đầu trong Closure, nó sẽ không ảnh hưởng đến các biến ban đầu. Để cập nhật các biến ban đầu, chúng ta có thể thêm một dấu &
. Một dấu &
trước một biến có nghĩa đây là một reference và vì vậy các biến ban đầu cũng được cập nhật.
// Set counter
$i = 0;
// Increase counter within the scope
// of the function
$closure = function () use ($i)
{
$i++;
};
// Run the function
$closure();
// The global count hasn't changed
echo $i; // Returns 0
// Reset count
$i = 0;
// Increase counter within the scope
// of the function but pass it as a reference
$closure = function () use (&$i)
{
$i++;
};
// Run the function
$closure();
// The global count has increased
echo $i; // Returns 1
Closure cũng rất hữu ích khi sử dụng các hàm PHP mà chấp nhận hàm call back
như array_map, array_filter, array_reduce hoặc array_walk.
Ví dụ:
// An array of names
$users = ['Thỏ 7 màu', 'Đậu đỏ', 'Gấu AK', 'Bé đội xô'];
// Pass the array to array_walk
array_walk($users, function ($name) {
echo "Hello $name<br>";
});
// Returns
// -> Hello Thỏ 7 màu
// -> Hello Đậu đỏ
// -> Hello Gấu AK
// -> ..
Ngoài ra, chúng ta có thể truy cập các biến bên ngoài phạm vi của Closure bằng cách sử dụng use
// Set a multiplier
$multiplier = 3;
// Create a list of numbers
$numbers = [1, 2, 3, 4];
// Use array_walk to iterate
// through the list and multiply
array_walk($numbers, function ($number) use ($multiplier) {
echo $number * $multiplier;
});