Ich habe eine TrimInput Middleware als Middleware für meine Routen registriert, um alle Benutzereingaben zu trimmen, bevor die Anfrage den Controller trifft. Innerhalb der Middleware scheint das Trimmen zu funktionieren, aber wenn ich die Anfrage in der Aktion ablege, scheint die Anfrage unverändert zu sein, als ob es vorher keine Middleware gegeben hätte.Anfrage in Middleware ändern?
Was ist das Problem hier? Das Problem ist die ClientRequest, aber warum?
// 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: Es stellte sich heraus, dass der obige Code funktioniert, aber leider ignoriert meine ClientRequest
die 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'
];
}
}
ich das auf frische L5 prüft haben installieren und ich bin immer getrimmt Eingang . Vielleicht sollten Sie versuchen, 'php artisan clear-compiled' auszuführen? –
@ MarcinNabiałek Ich habe es gerade versucht und es hat nicht funktioniert. Könntest du deinen Arbeitscode in pastebin schreiben? –
Ich habe auch dieses Problem, ich bin auf 5.2, wenn ich Request Facade verwenden, wird die Eingabe geändert und an den Controller weitergegeben, aber wenn ich meine eigene Anfrage injiziere, erhält es nur die vollständige unverarbeitete Eingabe. Ich kann feststellen, dass es in der Middleware eine Instanz von \ Illuminate \ Http \ Request gibt, aber am Ende rufen Sie die Methode 'all()' aus 'App \ Http \ Requests \ ClientRequest' auf. Ich denke, das hat etwas zu tun, aber ich weiß nicht, wie ich es lösen soll. Irgendwelche Fortschritte in dieser Frage? – Anfelipe