【问题标题】:How to share between controllers eloquent model data in laravel?如何在 laravel 中的控制器之间共享雄辩的模型数据?
【发布时间】:2019-04-13 12:15:38
【问题描述】:

假设我有在整个页面中使用的变量,例如货币和语言。为了在视图之间共享它们,我像这样使用 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);会话是相当糟糕的主意。

这个问题能解决吗?

【问题讨论】:

  • 能否请您发布您的 eloquent/db 的数据,您希望从全局存储或需要哪种数据?

标签: php laravel eloquent


【解决方案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-&gt;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.
    // ...

【讨论】:

  • 附加说明:在子控制器中我必须添加“parent::__construct();”因为 BaseController 构造没有被触发,也没有设置任何变量。
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 2017-01-03
  • 2012-02-16
  • 2014-12-14
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多