Php 如何在控制器之间共享laravel中雄辩的模型数据?
让我们假设我有一些变量,这些变量在整个页面中使用,比如货币和语言。要在视图之间共享它们,我使用AppServiceProvider,如下所示:Php 如何在控制器之间共享laravel中雄辩的模型数据?,php,laravel,eloquent,Php,Laravel,Eloquent,让我们假设我有一些变量,这些变量在整个页面中使用,比如货币和语言。要在视图之间共享它们,我使用AppServiceProvider,如下所示: class AppServiceProvider extends ServiceProvider { public function boot() { View::share('currenciesGlobal',Currency::get()); View::share('languagesGlobal'
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个对货币表的查询。我希望有一个全局变量和雄辩的收集,我可以在每个控制器访问
我曾尝试将数据存储在配置文件中(但在配置文件中我无法使用elount/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);
}
}
<?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.
// ...
您可以发布eloquent/db的数据吗?您想从全局存储或需要哪种数据?附加说明:在子控制器中,我必须添加“parent::u construct();”,因为没有触发BaseController构造,也没有设置变量。