Intereting Posts

Laravel не запоминает переменные класса

У меня есть класс в Laravel с переменной класса, которая содержит и объект

class RegisterController extends Controller { public $company; 

Когда я устанавливаю переменную в моем методе индекса, все идет хорошо

 public function index($id = null) { $this->company = new Teamleader\Company; 

Когда я пытаюсь получить доступ к $ this-> компании из другого метода, он возвращает null

Это мой полный код

 class RegisterController extends Controller { public $company; public function index($id = null) { $this->company = new Teamleader\Company; // returns ok! dd($this->company); return view('register.index'); } public function register() { // returns null dd($this->company); } } 

Я что-то упускаю? Спасибо!

В Laravel 5 вы можете ввести новый экземпляр Teamleader\Company в методы, в которых вы нуждаетесь.

 use Teamleader\Company; class RegisterController extends Controller { public function index($id = null, Company $company) { dd($company); } public function register(Company $company) { dd($company); } } 

Для Laravel <5 зависимость вводится в конструктор.

 use Teamleader\Company; class RegisterController extends Controller { protected $company; public function __construct(Company $company) { $this->company = $company; } public function index($id = null) { dd($this->company); } public function register() { dd($this->company); } } 

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

Вы не являетесь классом __constructing (), вы просто назначаете переменную внутри функции внутри класса, что означает, что она инкапсулирована в эту функцию внутри этого класса.

Поэтому, если вы хотите сделать глобальную $this->company global в классе, вы можете использовать

 public function __construct() { $this->company = new Teamleader\Company; }