2015-05-30 21 views
5

İsteğim denetleyiciye ulaşmadan önce tüm kullanıcı girdilerini kesmek için yollarım için bir ara katman olarak kaydedilmiş bir TrimInput ara yazılımım var. Middleware içinde kırpma çalışıyor gibi görünüyor, ama ben istek eylemi döktüğümde istek daha önce herhangi bir ara katman olmadığı gibi modifiye edilmemiş görünüyor.Orta katmandaki talebi değiştirin?

Burada sorun nedir? Sorun, ClientRequest değil, neden?

// 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 
}]); 

DÜZENLEME: Yukarıda kodunun çalıştığını, çıktı, ama ne yazık ki benim ClientRequestTrimInputMiddleware yok sayar.

// 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

sizin web katman grubuna ekleyebilirsiniz ve ben kesilmiş girişi alıyorum . Belki de php artisan açık-compiled' çalıştırmayı denemelisiniz? –

+0

@ MarcinNabiałek Sadece denedim ve işe yaramadı. Çalışma kodunuzu yapıştırıcıya koyar mısın? –

+1

Ben de bu sorunu var, ben 5.2, Talebi Cephe kullanırsanız, giriş denetleyiciye değiştirilir ve yayılır, ben var, ama kendi isteğimi enjekte, sadece tam işlenmemiş girdi alır. Ortabilgisayarda, '\ Illuminate \ Http \ Request' örneğinin bulunduğunu, ancak sonunda' App'Http \ Requests \ ClientRequest'den 'all()' yöntemini çağıracağınızı fark edebilirim. Sanırım bunun yapılması gereken bir şey var, ama nasıl çözeceğimi bilmiyorum. Bu sorudaki herhangi bir gelişme var mı? – Anfelipe

cevap

0

Öncelikle app/HTTP/Kernel.php dosya içinde Middleware kısa el tuşu atamak gerekir. katman için Amacıyla

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

Eğer orta yazılımı bırakıyorsa ve bu gösteriliyorsa, o zaman bu isteklerin bir parçası olarak çalışıyor olmalıydı, bu yüzden yukarıdakileri zaten yaptığını varsayabilirdi, aksi takdirde onun yönlendirme yolunu kurmasıyla işe yaramazdı. –

+0

Doğru, bunu zaten yaptım. –

0

altına FormRequest üzerine istek girişine ve değiştirmek gibi, sen katman çalıştırılmadan önce DoIu çünkü /app/Http/Requests/Request.php üzerinde all() yöntemi kullanarak üzerine yazmak gerekir. Bu Laravel 5.4'te düzeltildi. İnanıyorum.

İşte benim için çalıştı. Request.php'de bu yöntemi ekleyin ve ara yazılımınızda yapılan değişiklikleri uygulayacaktır.

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

    return parent::all(); 
} 
0

kullanım çerçevenin Illuminate \ Vakfı \ Http/Katman \ TrimStrings.php orta katman ve taze L5 bu yüklemek doğrulandıktan