[英]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.