PHP – инъекция зависимостей Laravel: передать параметры конструктору зависимости

Я строю проект Laravel, и в одном из контроллеров я ввожу две зависимости в метод:

public function pusherAuth(Request $request, ChannelAuth $channelAuth) { ... } 

Мой вопрос очень прост: как передать параметры зависимости $channelAuth ?

На данный момент я использую некоторые сеттеры для передачи необходимых зависимостей:

 public function pusherAuth(Request $request, ChannelAuth $channelAuth) { $channelAuth ->setChannel($request->input('channel')) ->setUser(Auth::user()); 

Каковы альтернативы этому подходу?

PS Код должен быть проверен.

Solutions Collecting From Web of "PHP – инъекция зависимостей Laravel: передать параметры конструктору зависимости"

Благодаря той помощи, которую я получил на этой дискуссии в Laracast, я смог ответить на этот вопрос. Используя поставщика услуг, можно инициализировать зависимость, передав правильные параметры конструктору. Это поставщик услуг, который я создал:

 <?php namespace App\Providers; use Security\ChannelAuth; use Illuminate\Contracts\Auth\Guard; use Illuminate\Http\Request; use Illuminate\Support\ServiceProvider; class ChannelAuthServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->bind('Bloom\Security\ChannelAuthInterface', function() { $request = $this->app->make(Request::class); $guard = $this->app->make(Guard::class); return new ChannelAuth($request->input('channel_name'), $guard->user()); }); } } 

Вы можете создать и зарегистрировать своего поставщика услуг и создать объект с параметрами запросов конструктора.

Я не знаю, как это сделать в Laravel, но в Symfony2 вы можете добавить в свой сервис что-то вроде RequestStack. Это лучший способ, потому что у вас есть небольшие поставщики услуг, которые полностью проверяются.