Не удается получить доступ к переменной конструкции в методе (php laravel) - PullRequest
3 голосов
/ 25 апреля 2019

У меня есть базовый класс, который настраивает другие расширяющие контроллеры следующим образом:

class BaseController extends Controller
{
    public $globalCurrencies;
    public $globalLanguages;

    public function __construct()
    {
        $this->globalCurrencies = $this->getCurrencies();  // this works
        $this->globalLanguages = $this->getLanguages(); // this works
    }
}

И я использую один из помощников для расширения этого класса следующим образом:

class SessionHelper extends BaseController
{
    public $test;

    public function __construct()
    {
        parent::__construct();  // fire parent aka basecontroller construct

        $this->test = $this->globalCurrencies; // this works (variables are set)
        echo '__construct: '.$this->test; // this even displays it
    }

    public function getCurrencies()
    {
        dd('method'.$this->test); // NOT WORKING
    }

    public function getCurrentCurrency()
    {
        return $this->getCurrencies()->where('id', Session::get('currencyId'))->first() ?? null;
    }
}

ПозжеКод используется в модели:

class Product extends Model
{
    protected $table = "products";
    public $timestamps = true;

    public $sessionHelper;

    public function __construct()
    {
        $this->sessionHelper = new SessionHelper;
    }

    public function getPrice($conversion_rate = null)
    {
        return number_format($this->price_retail / $this->sessionHelper->getCurrentCurrency()->conversion_rate, 2);
    }
}

Есть какие-либо идеи тела, почему я могу получить доступ в переменной конструкции, но не в методе?Если я правильно помню, сначала запускается construct, поэтому все после должны иметь к нему доступ.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Измените свой метод на;

public function getCurrencies()
{
    dd('method', $this->test);
}

Вы не можете объединять строки и объекты / массивы.

Если это не решает проблему - проверьте файл laravel.log

0 голосов
/ 25 апреля 2019

Объявите переменную $ test как частную вне конструктора.Внутри конструктора держите его так, как вы делаете это прямо сейчас, а затем создайте установщик и получатель для тестовой переменной.

    class testObject
 {
 private $test;

 function __construct($test) 
 {
     $this->test= $this->globalCurrencies;
 }

 // test getter
 function getTest() 
 {
     return $this->test;
 }


 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...