簡體   English   中英

如何在 Laravel 中的控制器之間共享雄辯的模型數據?

[英]How to share between controllers eloquent model data in laravel?

讓我們假設我有跨頁面使用的變量,如貨幣和語言。 為了在視圖之間共享它們,我像這樣使用 AppServiceProvider:

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        View::share('currenciesGlobal',Currency::get());
        View::share('languagesGlobal',Language::get());
    }
}

我可以輕松地在視圖中訪問它們,但我不能在控制器中這樣做。 例如,我有產品列表,它根據用戶選擇的貨幣計算價格(存儲在會話中作為貨幣 ID)。

舉個例子:

public function getPrice()
{
    return number_format($this->price_retail / $this->sessionHelper->getCurrentCurrency()->conversion_rate, 2);
}

所以 30 個產品將創建 30 個對貨幣表的查詢。 我想要一個帶有 eloquent 集合的全局變量,我可以在每個控制器中訪問它。

我曾嘗試將數據存儲在配置文件中(但我無法使用 eloquent/db); 會話是相當糟糕的主意。

有沒有可能解決這個問題?

您可以使用繼承:

創建一個BaseController並在那里定義您的全局變量,並確保您的所有控制器都擴展了這個BaseController

例子:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class BaseController extends Controller
{
    /**
     * Add global vars, can even use eloquent models here.
     *
    */
    protected $global;

    public function __construct() 
    {
        // Fetch the user object
        $this->global = User::first();
        View::share('global', $this->global);
    }
}

現在確保你的其他控制器擴展這個控制器並訪問$this->global

例子:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\BaseController;

class OtherController extends BaseController
{
    public function __construct() 
    {
        // call parent model constructor
        parent::__construct(); 
    }
    // $this->global is available throughout this controller.
    // ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM