首頁 >後端開發 >php教程 >如何在 Laravel 5 中的所有視圖之間共用資料?

如何在 Laravel 5 中的所有視圖之間共用資料?

Patricia Arquette
Patricia Arquette原創
2024-12-01 02:36:08729瀏覽

How Can I Share Data Across All Views in Laravel 5?

Laravel 5 中向所有視圖傳遞資料

在Laravel 5 中,可以透過多種方式實現所有視圖之間的資料共享。

方法一:使用BaseController

建立一個擴展 Laravel 控制器的 BaseController 類別。

class BaseController extends Controller
{
    public function __construct()
    {
        $data = [1, 2, 3];
        View::share('data', $data);
    }
}

所有其他控制器都應該從BaseController 擴展:

class SomeController extends BaseController {
    // ...
}

方法2:使用過濾器

建立過濾器/filters.php或在單獨的過濾器類別檔案中:

App::before(function($request) {
    View::share('data', [1, 2, 3]);
});

或者,定義自訂過濾器:

Route::filter('data-filter', function() {
    View::share('data', [1, 2, 3]);
});

使用 Route::filter(將過濾器套用於特定路由).

方法三:使用中間件

使用中間件將資料傳遞到視圖:

Route::group(['middleware' => 'SomeMiddleware'], function() {
    // Routes
});

class SomeMiddleware
{
    public function handle($request)
    {
        View::share('data', [1, 2, 3]);
    }
}

方法4:使用View Composer

使用View將資料綁定到視圖作曲家。這允許您將資料綁定到特定視圖或所有視圖。

要將資料綁定到特定視圖,請建立一個 ViewComposer類別並將其註冊到服務提供者:

// ViewComposer
use Illuminate\Contracts\View\View;

class DataComposer
{
    public function compose(View $view)
    {
        $view->with('data', [1, 2, 3]);
    }
}

// Service Provider
public function boot() {
    view()->composer('view-name', 'DataComposer');
}

要綁定資料到所有視圖,在服務中使用以下程式碼提供者:

view()->composer('*', 'DataComposer');

參考:

  • [Laravel文件](https://laravel.com/docs/5.7/views#sharing-data -所有檢視)
  • [Laracast劇集](https://laracasts.com/learn/laravel/eloquent/ making-models)

以上是如何在 Laravel 5 中的所有視圖之間共用資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn