Mam oprogramowanie pośredniczące TrimInput zarejestrowane jako oprogramowanie pośrednie dla moich tras w celu przycięcia wszystkich danych wejściowych użytkownika przed wysłaniem żądania do kontrolera. Wewnątrz middleware przycinanie wydaje się działać, ale kiedy zrzucam żądanie w akcji, żądanie wydaje się niezmodyfikowane, tak jak wcześniej nie było oprogramowania pośredniego.Zmienić żądanie w oprogramowaniu pośredniczącym?
Na czym polega problem? Problemem jest ClientRequest, ale dlaczego?
// 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
}]);
EDIT: Okazało się, że powyższy kod działa, ale niestety mój ClientRequest
ignoruje TrimInputMiddleware
.
// 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'
];
}
}
I zostały zweryfikowane to na świeżym L5 zainstalować i Dostaję przyciętego wejście . Może powinieneś spróbować uruchomić 'php artisan clear-compiled'? –
@ MarcinNabiałek Właśnie go wypróbowałem i nie zadziałało. Czy możesz umieścić swój działający kod w pastebin? –
Mam również ten problem, jestem na 5.2, jeśli użyję elewacji żądania, dane wejściowe zostaną zmodyfikowane i propagowane do kontrolera, ale kiedy wstrzyknę własną prośbę, po prostu otrzymam pełne nieprzetworzone dane wejściowe. Zauważyłem, że w oprogramowaniu pośredniczącym istnieje instancja '\ Illuminate \ Http \ Request', ale na końcu wywołuje się metodę' all() 'z' App \ Http \ Requests \ ClientRequest'. Myślę, że to ma coś wspólnego, ale nie wiem, jak to rozwiązać. Jakieś postępy w tym pytaniu? – Anfelipe