Laravel不记得类变量

时间:2015-06-24 15:56:59

标签: php class 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);
    }

}

我错过了什么吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

你不是__constructing()类,你只是在一个类中的函数内部赋值变量,这意味着它被封装到该类中的那个函数中。

因此,如果您想在课堂上设置$this->company全局,则可以使用

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

答案 1 :(得分: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);
    }
}

依赖注入优于手动调用,因为您可以在测试期间轻松地将模拟对象传递给此控制器。如果您没有进行测试,未来可能会有其他人,请善待。 : - )