2015-06-24 5 views
1

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

class RegisterController extends Controller { 
    public $company; 

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

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

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

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

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); 
    } 

} 

ли я что-то отсутствует? Спасибо!

+0

Для этого работать как написано. Вам нужно будет вызвать 'index()' и * then * 'register()'. Если вы просто вызываете 'register()', он не будет установлен. – castis

+1

инициировать объект в '__construct()', тогда он будет доступен. – itachi

ответ

2

В 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); 
    } 
} 

Зависимость от инъекции лучше, чем ручное обращение, так как вы можете легко передать макет объекта этому контроллеру во время тестирования. Если вы не тестируете, может быть, кто-то еще будет в будущем, будь добр. :-)

3

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

Так что, если вы хотели бы сделать $this->company глобальный класс, вы могли бы использовать

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