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を拡張しないカスタムクラスで同じコードを試してみると、正常に機能します。

私は何かが足りないのですか?

4

1 に答える 1

1

コメントに加えて、私はついにこれが複雑な問題であることを知りました。これを回避するには、モデルをIoCにバインドし、モデルの新しいインスタンスを手動で返す必要があります。

App::bind('User', function()
{
    return new User;
});
于 2012-12-11T22:50:39.430 に答える