Laravel 5 so überprüfen Sie Parameter der route?
Möchte ich überprüfen die Parameter der route in das "Anfrage-Formular", aber nicht wissen, wie es zu tun.
Unten ist der Beispielcode, ich versuche mit:
Route
//controller Server
Route::group(['prefix' => 'server'], function(){
Route::get('checkToken/{token}',['as'=>'checkKey','uses'=> 'ServerController@checkToken']);
});
Controller
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests;
class ServerController extends Controller {
public function checkToken( \App\Http\Requests\CheckTokenServerRequest $request) //OT: - why I have to set full path to work??
{
$token = Token::where('token', '=', $request->token)->first();
$dt = new DateTime;
$token->executed_at = $dt->format('m-d-y H:i:s');
$token->save();
return response()->json(json_decode($token->json),200);
}
}
CheckTokenServerRequest
namespace App\Http\Requests;
use App\Http\Requests\Request;
class CheckTokenServerRequest extends Request {
//autorization
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'token' => ['required','exists:Tokens,token,executed_at,null']
];
}
}
Aber wenn ich versuchen, zu überprüfen, eine einfache url http://myurl/server/checkToken/222, ich bin immer die Antwort: no " token " parameter set
.
Ist es möglich, zu überprüfen, die Parameter in einem separaten "Formular anfordern", Oder ich habe zu tun, alle in einem controller?
ps. Sorry für mein schlechtes Englisch.
- Ich habe schon Folgendes sehen: how-to-validate-route-parameters-in-laravel-5
- Müssen Sie überprüfen nur die Parameter der route oder "gemischt" mit Anfrage-Parameter?
- Nur die Parameter der route.. gibt Es einen Unterschied? Danke!
- haben Sie versucht, mit Hilfe der middleware. Sie kann sogar mehr, die eine middleware. so können Sie in der Gruppe routings. siehe auch hier laravel.com/docs/5.2/middleware
- Schöne Frage, ich mag diesen thread.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Weg für diese überschreiben
all()
Methode fürCheckTokenServerRequest
etwa so:BEARBEITEN
Oben genannte Lösung funktioniert in Laravel < 5.5. Wenn Sie es verwenden möchten, in Laravel 5.5 oder höher, die Sie verwenden sollten:
statt.
$all = null
parameter der Funktion.Überschreiben der
all()
Funktion des Request-Objekts automatisch angewendet werden Validierungsregeln für die URL-ParameterZugriff auf die Daten, die normalerweise von der Steuerung wie diese, nach dem injizieren der Anfrage:
Form Anfrage Validatoren verwendet werden, die für die Validierung HTML-Formular Daten, die zum server gesendet wird über POST Methode. Es ist besser, dass Sie verwenden Sie Sie nicht für die Validierung der Parameter der route. route-Parameter sind hauptsächlich für den Abruf von Daten aus dem data base, so dass um sicherzustellen, dass Ihre token-parameter der route korrekt ist, ändern Sie diese Zeile in Ihrem code, von
zu
firstOrFail() ist eine sehr gute Funktion hat, sendet er 404 an Ihre Benutzer, wenn der Benutzer einfügen Ungültiger token.
erhalten Sie
no " token " parameter set
weil Laravel setzt Voraus, dass die "token" - parameter ist ein POST-Daten, die in Ihrem Fall ist es nicht.wenn Sie darauf bestehen, überprüfen Sie Ihre "token" - parameter, Formular-Anfrage Prüfungen, die Sie gonna verlangsamen Ihre Anwendung, denn Sie führen zwei Anfragen an die db,
eine hier
ist und man hier
Schlage ich firsOrFail zu tun, sowohl Validierung und abrufen auf einmal.
FormRequest
aber nicht, dass so viel nützliches? Es gibt nichts zu sagen bei Laravel docs, die FormRequests sollte nur verwendet werden, für diePOST
Anfragen. Ich meine, wir habenDELETE
,PUT
- und andere Arten von verlangen, die Notwendigkeit, Daten-Validierung. Wenn ein FormRequest ist der Weg zu separaten Controller-Logik von Validierungs-Logik, das ist der Weg zu gehen. Was denkst du über es? Ich glaube, ich änderte meine Meinung aus dieser Sicht.Merkmal ist, kann diese überprüfung relativ automagic.
Merkmal
Nutzung
Request
ist der Weg zu gehen, nicht den Zug. Nur nicht mischen Sie es mitFormRequest
. Natürlich können Sie die base-code anFormRequest
aber sollte das nicht reichen gibt es ab. Wie ich schon sagte, Sie sind Dinge, die für andere sorgen. Wenn irgendwann späterFormRequest
aus irgendeinem Grund ändern, wird es nicht Auswirkungen auf Ihre eigenenRequest
. Und natürlich, das ist nur meine Meinung.php artisan make:request ...
FormRequest
aber es ist einfach zu verdammt nützlich. Was macht Ihr Merkmal unterscheidet sich von der nur das überschreiben dervalidationData
Methode wie diese:protected function validationData() { return $this->route()->parameters() + $this->all(); }
?Wenn Sie nicht wollen, geben Sie jede route param und genauso alle route params können Sie überschreiben, wie diese:
Laravel < 5.5:
Laravel 5.5 oder höher:
FormRequest
Sie können auch überschreiben Sie dievalidationData
Methode wieprotected function validationData() { return $this->route()->parameters() + $this->all(); }
.Für
\App\Http\Requests\CheckTokenServerRequest
Sie können hinzufügenuse App\Http\Requests\CheckTokenServerRequest;
an der Spitze.Wenn Sie übergeben die
token
durchurl
Sie können es verwenden, mag eine variable incontroller
.Ihnen fehlt nur noch der Unterstrich vor-token. Ersetzen mit
überall dort, wo Sie überprüfen Sie es gegen die form generiert, die von laravel.
oder
FormRequest hat eine Methode
validationData()
, der definiert, welche Daten für die Validierung. Also einfach überschreiben, dass man mit dem route-Parameter im Formular Anfrage-Klasse:oder verlassen die meisten der
all
Logik an Ort und Stelle und überschreibeninput
Methode vontrait \Illuminate\Http\Concerns\InteractsWithInput