Я строю проект 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 Код должен быть проверен.
Благодаря той помощи, которую я получил на этой дискуссии в 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. Это лучший способ, потому что у вас есть небольшие поставщики услуг, которые полностью проверяются.