2015-05-30 10 views
5

मैं एक TrimInput मिडलवेयर मेरी मार्गों सभी उपयोगकर्ता इनपुट ट्रिम करने से पहले अनुरोध नियंत्रक हिट के लिए एक मध्यस्थ के रूप पंजीकृतसेवकाओं है। मिडलवेयर के भीतर ट्रिमिंग काम कर रही प्रतीत होती है, लेकिन जब मैं कार्रवाई में अनुरोध को डंप करता हूं तो अनुरोध अनमोडिफाइड लगता है जैसे पहले कोई मध्यवर्ती नहीं था।मिडलवेयर में अनुरोध संशोधित करें?

क्या समस्या यहाँ है? समस्या क्लाइंटरक्वेट है लेकिन क्यों?

// TrimInput.php 
<?php namespace App\Http\Middleware; 

use Closure; 

class TrimInput { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) { 
     $request->replace($this->trimArrayRecursive($request->all())); 
     // When I dump $request right here, all seems fine (the input is trimmed) 

     return $next($request); 
    } 

    protected function trimArrayRecursive($input) { 
     if (!is_array($input)) { 
      return trim($input); 
     } 

     return array_map([$this, 'trimArrayRecursive'], $input); 
    } 

} 


// Somwhere in my routes.php 
Route::post('/test', ['middleware' => 'trim', 'uses' => function(\App\Http\Requests\ClientRequest $request) { 
    dd($request->all()); // Unfortunately dumps the unfiltered (untrimmed) input 
}]); 

संपादित करें: यह पता चला है कि इसके बाद के संस्करण कोड काम कर रहा है, लेकिन दुर्भाग्य से मेरी ClientRequestTrimInputMiddleware ध्यान नहीं देता।

// ClientRequest.php 
<?php namespace App\Http\Requests; 

class ClientRequest extends Request { 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() { 
     $idToIgnore = $this->input('id'); 

     return [ 
      'name'   => 'required|max:255|unique:clients,name,' . $idToIgnore, 
      'street'   => 'required|max:255', 
      'postal_code' => 'required|digits:5', 
      'city'   => 'required|max:255', 
      'contact_person' => 'required|max:255' 
     ]; 
    } 

} 
+0

मैं ताजा L5 पर इस स्थापित सत्यापित है और मैं छंटनी की इनपुट हो रही है । शायद आपको 'php artisan clear-compiled' चलाने की कोशिश करनी चाहिए? –

+0

@ मार्किननाबियायाक मैंने अभी कोशिश की और यह काम नहीं किया। क्या आप अपना कामकाजी कोड पेस्टबिन में डाल सकते हैं? –

+1

मैं भी इस समस्या है, मैं 5.2 पर हूँ, अगर मैं अनुरोध फसाड का उपयोग करें, इनपुट संशोधित और नियंत्रक से मिल जाता है, लेकिन जब मैं अपने खुद के अनुरोध इंजेक्षन, यह सिर्फ पूर्ण असंसाधित इनपुट हो जाता है। मैं देख सकते हैं कि मिडलवेयर में, वहाँ '\ रोशन का एक उदाहरण है, जब \ http \ Request', लेकिन अंत में आप' सब() 'एक' अनुप्रयोग \ Http से विधि \ अनुरोध \ ClientRequest' बुला रहे हैं। मुझे लगता है कि इसमें कुछ करने के लिए है, लेकिन मुझे नहीं पता कि इसे कैसे हल किया जाए। इस सवाल पर कोई प्रगति? – Anfelipe

उत्तर

0

आप पहली बार मिडलवेयर अपने एप्लिकेशन/HTTP/Kernel.php फ़ाइल में एक छोटी हाथ कुंजी असाइन करना चाहिए। नीचे

protected $routeMiddleware = [ 
    'auth' => 'App\Http\Middleware\Authenticate', 
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 
    'trim' => 'App\Http\Middleware\TrimInput ', 
]; 
+1

वह मिडलवेयर डंपिंग है और उस को दिखा रहा है, तो यह अनुरोध के भाग के रूप में चलना चाहिए, तो एक ग्रहण करेंगे वह पहले से ही ऊपर किया है, अन्यथा यह जिस तरह से वह अपने मार्ग की स्थापना की है के साथ काम नहीं होगा। –

+0

ठीक है, मैंने पहले ही यह किया है। –

0

मिडलवेयर के लिए आदेश में करने के लिए और FormRequest पर अनुरोध इनपुट संशोधित की तरह, आप /app/Http/Requests/Request.php पर all() पद्धति का उपयोग करके इसे अधिलेखित करना है क्योंकि यह पहले मिडलवेयर निष्पादित किया जाता है भरी हुई है की जरूरत है। यह लैरवेल 5.4 में तय किया गया था मुझे विश्वास है।

यहाँ क्या मेरे लिए काम किया है। Request.php में यह विधि जोड़ें और यह आपके मिडलवेयर में किए गए परिवर्तनों को लागू करेगा।

public function all() 
{ 
    $this->merge($this->request->all()); 

    return parent::all(); 
} 
0

उपयोग ढांचे के रोशन \ फाउंडेशन \ HTTP/मिडिलवेयर \ TrimStrings.php मिडलवेयर और अपने web मिडलवेयर समूह में जोड़ने के

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