访问Laravel BaseController属性

时间:2014-04-12 18:35:51

标签: inheritance laravel controller repository-pattern

我试图得到它,所以任何扩展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);
    }
}

感谢。

2 个答案:

答案 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->用户