Trong bài viết này, giả sử chúng ta có view
welcome.blade.php
như sau<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
Như vậy để truyền dữ liệu ra View (Passing Data To Views) chúng ta có các cách như sau đây để trên view
welcome.blade.php
có thể sử dụng được được biến $name
Cách 1: Truyền vào 1 mảng
return view('welcome', [
'name' => 'Chung Nguyễn'
]);
Nếu cần truyền thêm dữ liệu thì thêm vào mảng trên bây nhiêu thôi.
Cách 2: Sử dụng with method
return view('welcome')->with('name', 'Chung Nguyễn');
Với việc dùng view helper function, chúng ta hoàn toàn có thể pass data to views 1 cách dễ dàng thông qua phương thức with, cũng giống như ở trên nhưng code chúng ta sẽ trở nên sáng sủa, dễ nhìn hơn phải k nào
Cách 3: Lồng compact
$name = 'Chung Nguyễn';
return view('welcome', compact('name'));
Cách này trong Laravel document không có nhắc tới, mình hay dùng cách này vì số lần gõ phím là ít nhất hehe
Nếu muốn truyền thêm nhiều dữ liệu hơn thì thêm như dưới đây
$name = 'Chung Nguyễn';
$age = 25;
return view('welcome', compact('name', 'age'));
Cách 4: Chia sẻ dữ liệu cho toàn bộ Views
Laravel cung cấp phương thức
share
chia sẻ dữ liệu cho toàn bộ Views (Sharing Data With All Views) hay nói cách khác là biến toàn cục.
Thông thường, bạn nên đặt
share
trong method boot
của service provider
chẳng hạn app/Providers/AppServiceProvider.php
hoặc trong __construct
function của Controller<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('name', 'Chung Nguyễn'); // <= Truyền dữ liệu
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
(credit: lượm lặt từ: https://chungnguyen.xyz/posts/truyen-du-lieu-ra-view-trong-laravel)
Ở cách 4 thì dùng view::share tiện hơn rất nhiều, và thấy là workable từ 5.4 trở lên.
1) Giả sử trong Route có
// sẽ gọi /myview trên trình duyệt, đây là request --> gọi tới route --> tới controller
Route::get('/myview', 'MyController@myview');
Route::get('/Time/{t}', 'MyController@Time');
// share giữa route, controller và view
View::share('khoahoc', 'Tiếng Việt');
2) Trong MyController có
public function Time($t){
return view('myview', ['time'=> $t]);
}
3) Trong myview có
<p>It is <?php echo $khoahoc;?></p>
Kết quả trên /Time/thamso của trình duyệt khi request vẫn ra
Đây là nội dung từ Controller:44
Đây là nội dung từ Route Tiếng Việt
Tham khảo:
https://laravel.com/docs/5.5/views
vậy echo trong view kia là echo cái biến $khoahoc tạo trong route.
ReplyDeletedùng myview.blade.php thì {{}} cho khỏe lol
ReplyDeletenoted: Khi dùng hàm view::share trong route thì biến trong hàm có thể được truyền tới bất kì view nào.
ReplyDeletevui ghê.
https://laravel.com/docs/5.5/views
ReplyDelete