Laravel 4 在控制器中注入 Eloquent 模型

Posted

技术标签:

【中文标题】Laravel 4 在控制器中注入 Eloquent 模型【英文标题】:Laravel 4 Injecting an Eloquent Model in a controller 【发布时间】:2012-11-28 05:09:13 【问题描述】:

我对 DI 和 IoC 的这个概念不熟悉,所以我可能做错了,但我试图将与控制器匹配的模型注入到控制器构造函数(UserModel -> UsersController)中,以便我可以模拟它稍后的。

所以我的模型看起来像:

use Illuminate\Auth\UserInterface;

class User extends Eloquent implements UserInterface 


    public function getAuthIdentifier()
    
        return $this->getKey();
    


    public function getAuthPassword()
    
        return $this->password;
    


然后我尝试像这样注入 UsersController:

class UsersController extends Controller 

    protected $user;

    public function __construct(User $user)
    
        $this->user = $user;
    

    public function index()
    
        //dd( $this->user);
        $users = $this->user->all();
        foreach ( $users as $user ) 
            print_r($user);
        return;
    


然后,当我在浏览器中点击此控制器时,我收到“无法解析依赖项解析”错误。

我注意到只有当我尝试注入的类是 eloquent 的子类时才会发生这种情况,如果我尝试使用不扩展 eloquent 的自定义类的相同代码,那么它可以正常工作。

我错过了什么吗?

【问题讨论】:

看看这个截屏视频vimeo.com/53029232 @Raf 谢谢,但实际上是它把我带到了这里,在那个屏幕投射中,泰勒没有展示如何注入我想要做的实际模型 你试过了吗 App::bind('UserInterface','User');并把 __controller(UserInterface $user) 好的,我尝试了这个场景,我得到了同样的结果,一个错误。 【参考方案1】:

在 cmets 之后,我终于知道这是一个复杂的问题。要绕过这一点,您需要将模型与 IoC 绑定并手动返回模型的新实例。

App::bind('User', function()

    return new User;
);

【讨论】:

嘿 Raf,谢谢我实际上已经从该线程中得到了答案:forums.laravel.com/viewtopic.php?id=3878

以上是关于Laravel 4 在控制器中注入 Eloquent 模型的主要内容,如果未能解决你的问题,请参考以下文章

如何防止参数在Laravel中的控制器方法中注入

关于laravel5.5控制器方法参数依赖注入原理深度解析及问题修复

译深入研究 Laravel 的依赖注入容器

如何将依赖项注入到laravel作业中

Laravel 服务容器 IoC(控制反转) 和 DI(依赖注入)

Laravel 不保存一对多关系