Php 将雄辩的模型绑定到服务容器

Php 将雄辩的模型绑定到服务容器,php,laravel,Php,Laravel,是否有人使用IoC容器绑定到一个雄辩的模型 例如,我有一个用于我的帐户和类别雄辩模型的存储库。帐户模型与类别有许多关系。类别存储库将帐户存储库注入构造函数 相反,我想注入这样一个实际的帐户模型 在“我的服务提供商”中: $this->app->bind(App\Models\Account::class, function ($app) { return (Auth::check()) ? Auth::user()->account : null; }); 在我的存储

是否有人使用IoC容器绑定到一个雄辩的模型

例如,我有一个用于我的帐户和类别雄辩模型的存储库。帐户模型与类别有许多关系。类别存储库将帐户存储库注入构造函数

相反,我想注入这样一个实际的帐户模型

在“我的服务提供商”中:

$this->app->bind(App\Models\Account::class, function ($app) {
    return (Auth::check()) ? Auth::user()->account : null;
});
在我的存储库中

use App\Models\Account;

class CategoryRepository
{
    private $account;

    public function __construct(Account $account = null)
    {
        // check and throw error if null
        $this->account = $account;
    }

    public function getAll()
    {
        return $this->account->categories()->get();
    }
}

如果我将一个真正有说服力的模型绑定到构造函数上,这是一种糟糕的做法,还是我会陷入什么可预见的陷阱?

虽然您可以这样做,但您可能不想这样做。如果您这样做,IoC容器将始终使用该绑定来解析帐户,而这不是您要查找的

更合适的方法是为如何解析CategoryRepository而不是Account定义绑定。这样,在解析CategoryRepository的代码中,可以确保始终传入实际帐户,如果不可用,则为null

$this->app->bind(App\Repos\CategoryRepository::class, function ($app) {
    $account = Auth::check() ? Auth::user()->account : null;
    return new App\Repos\CategoryRepository($account);
});