Ниже приведен пример кода, чтобы лучше объяснить:
class BaseController extends Controller
{
public $globalCurrencies;
public $currentCurrency;
public $globalLanguages;
public $currentLanguage;
public function __construct()
{
$this->globalCurrencies = $this->getCurrencies();
$this->globalLanguages = $this->getLanguages();
$this->middleware(function ($request, $next) {
$this->currentCurrency = $this->getCurrentCurrency();
$this->currentLanguage = $this->getCurrentLanguage();
return $next($request);
});
}
CartController
class CartController extends BaseController
{
public function __construct()
{
parent::__construct();
}
BaseController устанавливает базовые переменные для приложения.В корзине используются некоторые из них, например (текущая валюта).Некоторые переменные основаны на сеансах, поэтому в базовой конструкции есть промежуточное программное обеспечение, используемое для получения данных сеанса в конструкторе).В этой части все работает, и у корзины есть доступ к свойствам baseController.
Здесь возникает проблема:
class OrderController extends BaseController
{
public function loadPaymentsAndDelivery(Request $request)
{
$cart = new Cart;
dd($cart->globalCurrencies) // WORKS
dd($cart->currentCurrency) // NULL
}
}
По сути, на новом экземпляре Cart я могу получить доступ ко всем свойствам, созданным без промежуточного программного обеспечения.Без промежуточного программного обеспечения я не могу получить доступ к сеансу для настройки корзины.Метод loadPaymentsAndDelivery загружается через ajax, но я попытался напрямую вызвать метод, и свойства все еще были нулевыми.
Может кто-нибудь объяснить, почему это происходит?