我试图得到它,所以任何扩展base的控制器都可以访问使用以下方法创建的User对象:
(这很好用)
use My\Namespace\Repository;
class FooController extends \BaseController
{
protected $user;
protected $prop;
public function __construct(UserRepository $user)
{
$this->user = $user;
$this->prop = $this->user->getProp();
}
public function index()
{
return View::make('page')->with('userProp', $this->prop);
}
}
但是,我无法抽象用户的创建并将属性从FooController.php中取出并将其放入BaseController.php中,以便任何扩展Base的控制器都可以访问它,如下所示:
class FooController extends \BaseController
{
public function index()
{
return View::make('page')->with('userProp', $this->prop);
}
}
感谢。
答案 0 :(得分:2)
如果你喜欢这样,它会起作用:
用户存储库:
class UserRepository {
public function getProp()
{
return 'user prop';
}
}
基本控制器
class BaseController extends Controller
{
protected $user;
protected $prop;
public function __construct(UserRepository $user)
{
$this->user = $user;
$this->prop = $this->user->getProp();
}
}
从BaseController扩展的FooController
class FooController extends BaseController
{
public function index()
{
return $this->prop;
}
}
测试它的路线:
Route::get('testuser', 'FooController@index');
要进行测试,只需将此代码添加到routes.php文件的顶部并点击该路径即可。
答案 1 :(得分:0)
上面的例子不起作用,因为你没有调用parent :: __ construct()
以下示例打破了去耦,但它是我发现的唯一方法,而不是在所有子类中重复注入
BaseController
受保护的$ users;
$ this-> users = App :: make('Repositories \ Users \ UsersRepositoryInterface');
FooController扩展了BaseController
返回$ this->用户