【问题标题】:Access Laravel BaseController Property访问 Laravel BaseController 属性
【发布时间】:2014-04-12 18:35:50
【问题描述】:

我正在尝试获取它,以便任何扩展 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);
    }
}

谢谢。

【问题讨论】:

  • 您是否使用Auth 类来处理安全问题?如果是这样,您应该能够在任何地方虚拟地访问当前用户,使用:Auth::user().
  • Rubens:是的,我试图抽象出最低限度。我不允许所有数据返回,在模型中 getProp() 将结果限制为该用户。

标签: inheritance laravel controller repository-pattern


【解决方案1】:

如果你这样做,它将起作用:

用户存储库:

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 文件顶部并点击该路由。

【讨论】:

    【解决方案2】:

    上面的例子不起作用,因为你没有调用 parent::__construct()

    下面的示例打破了解耦,但这是我发现的唯一方法,无需在所有子类中重复注入

    基础控制器

    受保护的 $users;

    $this->users = App::make('Repositories\Users\UsersRepositoryInterface');

    FooController 扩展 BaseController

    return $this->用户

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 2020-11-07
      • 2019-01-29
      • 2021-07-06
      • 2020-04-14
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多