algolia search

Tìm thấy x bài viết trong xms.

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');
    }
}

🔷🔷🔷🔷🔷🔷🔷🔷🔷🔷

Đánh giá bài viết

Thích thì like
Truyền dữ liệu ra View trong Laravel
5/5 2 votes

Bình luận

Nguyen Huy avatar
Nguyen Huy
Anh ơi cho em hỏi em sử dụng View::share('key', 'value') thì làm sao để truyền được nhiều biến ra các view được ah.
Chung Nguyễn avatar
Chung Nguyễn
Thì mình View::share nhiều lần kiểu
  • View::share('key1', 'value1')
  • View::share('key2', 'value2')
  • ...
Hoặc một lần như dạng mảng
View::share(['data' , ['key1' => 'value1', 'key2' => 'value2', ...])
Nguyen Huy avatar
Nguyen Huy
Chung Nguyễn cảm ơn anh nhiều ah.
Minh Luân Vũ avatar
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 avatar
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é

Hiển thị bình luận Facebook