Truyền dữ liệu ra View trong Laravel
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()
{
//
}
}
Cách 5: Sử dụng composer truyền dữ liệu cho một số views được chỉ định
Giống như cách 4 ở trên bạn có thể dùng view composer để truyền dữ liệu cho một số views nhất định, trong AppServiceProvider
hàm boot
// Khai báo class App\Http\ViewComposers\ProfileComposer
// sẽ được gọi khi 1 trong 2 view profile, profile2 được render
View::composer(
['profile', 'profile2'], 'App\Http\ViewComposers\ProfileComposer'
);
// Sử dụng Closure callback nhanh gọn
View::composer(['profile', 'dashboard'], function ($view) {
$view->with('name', 'Chung Nguyễn');
});
Với cách sử dụng composer ở trên thì bạn phải tạo một class mới có tên ProfileComposer
nằm trong thư mục app/Http/ViewComposers
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
class ProfileComposer
{
/**
* Create a new profile composer.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
// truyền dữ liệu ở đây nè
$view->with('name', 'Chung Nguyễn');
}
}
🔷🔷🔷🔷🔷🔷🔷🔷🔷🔷
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận
Nguyen Huy
Chung Nguyễn
Nguyen Huy
Chung Nguyễn cảm ơn anh nhiều ah.
Minh Luân Vũ
Còn nếu chỉ muốn chia sẻ dữ liệu cho 1 vài views nào đó thì làm sao ạ
Chung Nguyễn
Chia sẻ dữ liệu cho vài views nào đó thì mình dùng view composer, mình vừa cập nhật bạn nhé