2017-05-23 4 views
1

In einer Formularanforderung Klasse verwende ich eine Methode wie diese, um Eingabedaten zu validieren.Laravel - limit FormRequest auf bestimmte Parameter

class SignupRequest extends FormRequest 
{ 
... 
    public function rules() 
    { 
     return [ 
      'user.email' => 'required_with:user|email', 
      'user.domain_name' => 'required_with:user|string', 
      'user.password' => 'required_with:user|string|min:8', 
      'user.username' => 'required_with:user', 
     ]; 
    } 
... 
} 

Später in einem Controller ich so etwas wie dieses

$data = $request->get('user', []); 
return $this->response($this->userService->create($data, false), 201); 

ich irgendwie meine SignupRequest schreiben wollen, die es übergeben lassen werden Felder sollten. Also, wenn ich später $data = $request->get('user', []); bekomme, bin ich sicher, dass nur Felder darin erlaubt sind.

Ist dies in FormRequest möglich?

P.S. Ich kenne $request->only(['field1', 'field2', 'field3']) Weg, aber wenn ich die Felder in SignupRequest extends FormRequest begrenzen möchte. Weil, wenn ich $request->only([...]) in meinem Code mehrmals benutze, würde ich es mehrmals später ändern müssen. Ich möchte es an einem Ort behalten.

+1

Sie können immer nur $ request-> tun (['field1', 'field2', 'field3']) und dies wird nur ein Array der angegebenen Request-Parameter zurückgeben. –

+0

Vertraue niemals den Feldern, die aus einem Formular kommen, du musst es immer entfernen oder validieren, da @Yasen Slavov sagte, du kannst nur die spezifischen Felder anfordern, in deinem Fall sollte sicherer sein, wenn du die gewünschten Daten anforderst und auf einem neuen speicherst Array und dann den Benutzer erstellen. – Troyer

+0

https://laravel.com/docs/5.4/requests#retrieving-input Scrollen Sie nach unten zu "Abrufen eines Teils der Eingabedaten" - verwenden Sie nur/except, um die Daten abzurufen, die Sie wirklich möchten (Teilmenge der Eingabedaten). – lbartolic

Antwort

1

FormRequest dient dazu, Ihre Anfragedaten zu validieren, nicht zu kontrollieren. Sie können jederzeit die benötigten Eingaben extrahieren.

$data = $request->only(['user.name', 'user.password']); 

Edit: Basierend auf Ihren Kommentar, Sie so etwas tun kann. Auf diese Weise können Sie alle Feldnamen in einer einzigen Anfrage speichern, um sie organisiert und einfacher zu aktualisieren.

Fügen Sie diese auf Ihre SignupRequest

public function loginData() 
{ 
    return array_only($this->input('user', []), ['username', 'password']); 
} 

es in der Steuerung verwenden wie so

$request->loginData(); 

return $this->response($this->userService->create($request->loginData(), false), 201); 
+0

Ich möchte den Login an einem Ort behalten. Dies müsste ich möglicherweise an mehreren Stellen verwenden. Und wenn ich später die Liste der Felder ändern möchte, müsste ich sie an mehreren Stellen ändern. Deshalb frage ich nach einer Einschränkung in der Klasse "FormRequest". – Gruz

+0

@Gruz überprüfen Sie meine Bearbeitung auf die Antwort. Es sollte tun, was Sie brauchen, und die Dinge so halten, wie Sie es wünschen. – Sandeesh

2

würden Sie das nicht mit dem Antrag müssen tun.

Eine Möglichkeit wäre, etwas zu tun:

$user = $request->input('user', []); 
$data = array_only($user, ['email', 'domain_name', 'password', 'username']); 

Oder man könnte es auch inline:

$data = array_only($request->input('user', []), ['email', 'domain_name', 'password', 'username']); 

hoffe, das hilft!

+0

Ich möchte den Login an einem Ort behalten. Dies müsste ich möglicherweise an mehreren Stellen verwenden. Und wenn ich später die Liste der Felder ändern möchte, müsste ich sie an mehreren Stellen ändern. Deshalb frage ich nach einer Einschränkung in der Klasse "FormRequest". – Gruz

Verwandte Themen