7

好吧,代码描述了这一切。我有一个实体服务提供者,它传递一个播放列表模型的实例,它应该获取一个数组作为它的第一个构造函数参数。如何通过 app->bind 传递该参数?知道 EntityServiceProvider 在控制器中引用时会自动注入。

        // Current Code
        /**
         * Playlist Entity
         *
         * @return Playlist\PlaylistEntity
         */
        $this->app->bind('Playlist\PlaylistEntity', function($app)
        {
            return new PlaylistEntity($app->make('Playlist\PlaylistRepositoryInterface'));
        });



        // Should be something like this:
        /**
         * Playlist Entity
         *
         * @return Playlist\PlaylistEntity
         */
        $this->app->bind('Playlist\PlaylistEntity', function($app)
        {
            return new PlaylistEntity($app->make('Playlist\PlaylistRepositoryInterface', $parameters));
        });

类似案例:Laravel 4:将数据从 make 传递给服务提供者

4

3 回答 3

8

亚历克斯·拉塞尔的评论也对我有用。

据我所知,“类似案例”帖子中的答案是正确的。$this->app->bind('Whatever', function ($app, $params) { var_dump($params); });其次是App::make('Whatever', [1, 2, 3]);var_dumps[1, 2, 3]数组。

于 2016-04-05T03:21:58.050 回答
4

在 Laravel 5.4 中,使用 App::make() 从容器解析时传递配置参数的功能被删除,随后重新实现为 App::makeWith()

顺便说一句,我试图对上一个答案发表评论,但它没有让我这样做。可能是因为经验值不够?

于 2017-05-09T23:00:25.887 回答
2

感谢@yevgeniy-afanasyev 在嘲笑时指出问题。如果您需要模拟这些实例,您可以在这里寻求 Taylor Otwell 的早期建议:https ://github.com/laravel/ideas/issues/391#issuecomment-285197048

我只是需要它,而且效果很好。只需返回一个闭包并调用它,当你::make.

// Service Provider
$this->app->bind(MyClass::class, function ($app) {
   return function($param) : MyClass
   {
       return new MyClass($param);
   }
}

// ::make
$myInstance = App::make(MyClass::class)($myParameter);

// mock
$myMock = Mockery::mock(new MyClass($myParameter));
$this->instance(MyClass::class, function($param) use ($myMock) { return $myMock; });
于 2019-05-15T15:27:16.387 回答