让我们假设我拥有在整个页面中使用的变量,例如货币和语言。要在视图之间共享它们,我使用AppServiceProvider是这样的:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::share('currenciesGlobal',Currency::get());
View::share('languagesGlobal',Language::get());
}
}
我可以在视图中轻松访问它们,但是我不能在控制器中进行访问。例如,我有一个产品列表,它根据用户选择的货币(存储在会话中作为currencyId)来计算价格。
例如:
public function getPrice()
{
return number_format($this->price_retail / $this->sessionHelper->getCurrentCurrency()->conversion_rate, 2);
}
因此,有30种产品将对货币表创建30个查询。我希望有一个雄辩的全局变量,可以在每个控制器中访问。
我试图将数据存储在配置文件中(但是我不能使用eloquent / db);会议是一个坏主意。
有可能解决这个问题吗?
答案 0 :(得分:1)
您可以使用继承:
创建一个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.
// ...