Как поделиться между контроллерами красноречивыми данными модели в laravel? - PullRequest
1 голос
/ 08 апреля 2019

давайте предположим, что у меня есть переменные, которые используются по всей странице, такие как валюты и языки.Чтобы разделить их между представлениями, я использую 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 collection, к которой я могу получить доступ на каждом контроллере.

Я пытался хранить данные в конфигурационных файлах (но там я не могу использовать eloquent / db);сессия довольно плохая идея.

Возможно ли решить эту проблему?

1 Ответ

1 голос
/ 08 апреля 2019

Вы можете использовать Наследование:

Создайте 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.
    // ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...