Laravel 4 控制器中注入 Eloquent 模型

3

我对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的自定义类进行相同的代码,则可以正常工作。

我是否遗漏了什么?


请查看此屏幕录像 http://vimeo.com/53029232 - Raftalks
@Raf 谢谢,但实际上正是这个让我来到这里的。在那个屏幕录像中,Taylor没有展示如何注入实际的模型,而这正是我正在尝试做的。 - silkAdmin
1
你尝试过使用 App::bind('UserInterface','User'); 并且添加 __controller(UserInterface $user) 吗? - Raftalks
好的,我尝试了这种情况,但是我得到了相同的结果,一个错误。 - Raftalks
1个回答

1

根据评论,我最终了解到这是一个复杂的问题。为了绕过这个问题,您需要将您的模型与IoC绑定,并手动返回一个新的模型实例。

App::bind('User', function()
{
    return new User;
});

嘿,Raf,谢谢。我已经从这个帖子中得到了答案:http://forums.laravel.com/viewtopic.php?id=3878 - silkAdmin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接