2015-04-17 6 views
8

मैं एक Laravel परियोजना का निर्माण कर रहा हूँ और नियंत्रक मैं एक विधि में दो निर्भरता इंजेक्शन लगाने कर रहा हूँ में से एक में निर्भरता: मैं $channelAuth निर्भरता के पैरामीटर कैसे पास करूं?

फिलहाल मैं कुछ setters उपयोग कर रहा हूँ की जरूरत निर्भरता पारित करने के लिए:

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

इस दृष्टिकोण के लिए विकल्प क्या हैं?

पीएस कोड को टेस्ट करने योग्य होना चाहिए।

उत्तर

7

इस Laracast discussion पर प्राप्त सहायता के लिए धन्यवाद, मैं इस प्रश्न का उत्तर देने में सक्षम था। एक सेवा प्रदाता का उपयोग करना कन्स्ट्रक्टर को सही पैरामीटर पास करके निर्भरता को आरंभ करना संभव है। यह सेवा प्रदाता मैंने बनाया है:

<?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()); 
     }); 
    } 
} 
+0

लेकिन यदि आपके इनपुट में 'channel_name' सेट नहीं है तो क्या होगा? आपके इनपुट को प्रमाणित करने का मौका मिलने से पहले यह कोड कॉल हो सकता है। – omarjebari

+0

@omarjebari मुझे लगता है कि आप 'ब्लूम \ सुरक्षा \ ChannelAuthInterface' इंजेक्शन कर रहे हैं, इस पर निर्भर करता है कि, मेरे मामले में, इनपुट मान्य होने के बाद है। – siannone

0

आप अपने स्वयं के सेवा प्रदाता को बना और पंजीकरण कर सकते हैं और निर्माता के अनुरोध पैरामीटर के साथ ऑब्जेक्ट बना सकते हैं।

मुझे नहीं पता कि लार्वेल में ऐसा कैसे करें, लेकिन सिम्फनी 2 में आप अपनी खुद की सेवा में अनुरोध कर सकते हैं जैसे अनुरोधस्टैक। यह सबसे अच्छा तरीका है, क्योंकि आपके पास छोटे सेवा प्रदाता हैं जो पूरी तरह से टेस्टेबल हैं।

संबंधित मुद्दे