У меня есть класс в 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; }