web-dev-qa-db-ja.com

Laravel)でApp :: make()またはApp :: makeWith()に依存関係パラメーターを渡す

依存関係を使用するクラスがあります。コントローラからの依存関係にパラメータを動的に設定できる必要があります。

$objDependency = new MyDependency();
$objDependency->setSomething($something);
$objDependency->setSomethingElse($somethingElse);

$objMyClass = new MyClass($objDependency);

Laravelのサービスコンテナを介してこれを達成するにはどうすればよいですか?これは私が試したことですが、これは私には間違っているようです。私のAppServiceProviderで:

$this->app->bind('MyClass', function($app,$parameters){

    $objDependency = new MyDependency();
    $objDependency->setSomething($parameters['something']);
    $objDependency->setSomethingElse($parameters['somethingElse']);

    return new MyClass($objDependency);
}

そして、コントローラーでは次のように使用します。

$objMyClass = App:make('MyClass', [
    'something'     => $something, 
    'somethingElse' => $somethingElse
]);

これは正しいです?これを行うためのより良い方法はありますか?

ありがとう

8
jd182

詳細なドキュメントはこちらでご覧いただけます: https://laravel.com/docs/5.6/container#the-make-method

これは次のように行われます。

$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);

または、app()ヘルパーを使用します

$api = app()->makeWith(HelpSpot\API::class, ['id' => 1]);

注:モックに使用している場合、makeWithはMockeryインスタンスを返しません。

10
realplay

次のようにすることもできます。

$this->app->make(SomeClass::class, ["foo" => 'bar']);
3
wired00