2015-02-11 16 views
7

में केवल एक पर्यावरण के लिए ग्लोबल मिडलवेयर सक्षम करें मैं लैरवेल 5 (बैरीवध/लार्वेल-कॉर्स) में एक वैश्विक मिडलवेयर का उपयोग कर रहा हूं, लेकिन मैं केवल इसे एक वातावरण (देव) पर सक्रिय होना चाहता हूं। ऐसा इसलिए है क्योंकि मुझे केवल देव वातावरण में संगीतकार के साथ इसकी आवश्यकता होती है, इसलिए यह उत्पादन में स्थापित नहीं है।लैरवेल 5

मैंने पंजीकृत किया है कि इसमें ऐप कर्नेल में एक वैश्विक मिडलवेयर है और इसलिए मुझे एक त्रुटि है यदि मैं अपने ऐप को उत्पादन में तैनात करने की कोशिश करता हूं (Class 'Barryvdh\Cors\CorsServiceProvider' not found)। मुझे पता है क्यों, लेकिन मैं एक समाधान की तलाश में हूँ।

क्या लैरवेल 5 में विश्व स्तर पर मिडलवेयर घोषित करने का कोई तरीका है लेकिन केवल एक वातावरण में आवश्यक है?

मुझे आशा है कि यह काफी स्पष्ट है, मैं अपने पोस्ट को संपादित कर सकते हैं अगर

उत्तर

1

सबसे अच्छा तरीका है मैं अब तक मिल गया है कर्नेल में env ('APP_ENV') की जाँच करने के

public function __construct(Application $app, Router $router) 
{ 
    if (env('APP_ENV', 'production') === 'local') { 
     $this->prependMiddleware('Clockwork\Support\Laravel\ClockworkMiddleware'); 
    } 

    parent::__construct($app, $router); 
} 
+0

जब मैं इसे ऐप/एचटीपी/कर्नेल.एफपी में आज़माता हूं तो मुझे (!) घातक त्रुटि: संदेश के साथ अपवाद अपवाद 'प्रतिबिंब अपवाद' 'क्लास ऐप \ Http \ अनुप्रयोग मौजूद नहीं है' /home/vagrant/earthport/vendor/laravel/framework/src/Illuminate/Container/Container.php लाइन 836 – HowApped

+0

पर होना चाहिए ' अनुप्रयोग :: isLocal() '। – goyote

0

:) नहीं kernel.php फ़ाइल

//... 
protected middleware = [ 
    'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 
    'Illuminate\Cookie\Middleware\EncryptCookies', 
    'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 
    'Illuminate\Session\Middleware\StartSession', 
    'Illuminate\View\Middleware\ShareErrorsFromSession', 
    'App\Http\Middleware\VerifyCsrfToken', 
    (!$this->app->environment('local')) ?: 'Path/To/Package' 
] 

इस का समाधान करना चाहिए। विश्व स्तर पर उत्पादन में लेकिन में नहीं मिडलवेयर को लागू करने के लिए इच्छुक -

+0

धन्यवाद। मैं यहां "$ यह" का उपयोग नहीं कर सकता:/ –

+0

केवल $ ऐप-> ... या बस ऐप() -> –

0

मैं था तुम्हारा के विपरीत क्वेरी है स्थानीय विकास मैंने __construct() विधि EspadaV8 की अनुशंसा की लेकिन यह मेरे लिए काम करता था क्योंकि env ('APP_ENV') एक मान वापस करने में विफल रहा जिसे मैं परीक्षण कर सकता था।

मैं बजाय मेरी मिडलवेयर में handle($request, Closure $next) विधि में कर्नेल $ मिडलवेयर सरणी में मेरी मिडलवेयर और उसके बाद, शामिल करने के लिए था क्या, मैं अपने कोड के सभी कोष्ठकों के भीतर - return $next($request); छोड़कर - साथ निम्नलिखित:

if(env('APP_ENV') !== 'local') { 

.......middleware code....... 

} 

शायद विपरीत आपके लिए काम करेगा (यानी === इसके बजाए! ==)?

मुझे संदेह है कि यह सबसे अच्छा समाधान नहीं है - जैसा कि आप इंगित करते हैं, कर्नेल वर्ग में मिडलवेयर (या नहीं) को लोड करने के लिए आदर्श होगा, लेकिन अभी तक कुछ बेहतर खोजने के बदले में, मैंने सोचा इस समाधान को बाहर निकालने के लिए। आशा करता हूँ की ये काम करेगा!

2

प्राप्त करने के लिए सेवा प्रदाता में यह बस लोड गिरी तो फोन या तो pushMiddleware या prependMiddleware

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot(Kernel $kernel) 
    { 
     if ($this->app->environment() === 'dev') { 
      $kernel->prependMiddleware(ClockworkMiddleware::class); 
     } 
    } 
} 
संबंधित मुद्दे