构造函数依赖注入如何在Laravel中工作?

时间:2014-12-15 05:43:52

标签: php laravel dependency-injection

我正在使用Laravel。我知道我们可以编写构造函数依赖注入,如下面的代码。我想知道它是如何工作的? 我的意思是构造函数如何获得$ post和$ user模型对象?如何注射?

    /**
     * Inject the models.
     * @param Post $post
     * @param User $user
     */
    public function __construct(Post $post, User $user)
    {
        parent::__construct();

        $this->post = $post;
        $this->user = $user;
    }

请解释一下。感谢。

1 个答案:

答案 0 :(得分:9)

Laravel IoC使用名为自动装配的流程。这在其他语言和其他PHP IoC容器中非常常见。

我们的想法是使用PHP Reflection API来查看构造函数参数。使用它,Laravel可以看到$post需要是Post实例,因此它将动态创建它。简而言之,Laravel会做这样的事情:

$post = new Post();
$user = new User();
$obj = new TheClass($post, $user);

(如果您想知道它将如何找到Post类:Composer自动加载器将根据您在composer.json中的配置自动加载它

此过程适用于服务(即&#34;实用程序&#34;类如数据库,记录器等),但它不能与模型<一起使用/ strong>班级。

原因很简单:Laravel无法知道哪个帖子和您要注入的用户(假设您的数据库中有多个)。相反,您应该从数据库中获取这些实例并将它们传递给您自己。