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