2017-05-22 10 views
1

ルート: $app->get('/ip/{ip}', GeoIpController::class . '@show');REST Lumen/Laravelリクエストでparamsを検証する方法は?

ipの検証方法は?私はshowメソッドにRequestオブジェクトを注入しようとしましたが、これを解決することができませんでした。私はRESTに固執したいので、URLのパラメータを使用することは私にとっては解決策ではありません。私はAPIの目的に使用しているので、レスポンスとしてのステータスコードが適切です。

はまた、そのように試してみました:

$app->bind('ip', function ($ip) { 
    $this->validate($ip, [ 
     'ip' => 'required|ip', 
    ]); 
}); 

EDIT:

フォーム要求はルーメンでサポートされていません:以下の答えが正しい 、私はおよそrequestsドキュメントの詳細情報を見つけました。フォーム要求を使用する場合は、完全なLaravelフレームワークを使用する必要があります。

つまり、ルーメンのコンストラクタでカスタムrequestsを注入することはできません。

+0

https://laravel.com/docs/5.4/validation#rule-ipの問題点を教えてください。 –

答えて

2

validateメソッドは、要求オブジェクトを最初のパラメータとして取ります。あなたはルート上でipを渡しているので、カスタムバリデーターを作成する必要があります。

public function show($ip) 
{ 
    $data = ['ip' => $ip]; 

    $validator = \Validator::make($data, [ 
     'ip' => 'required|ip' 
    ]); 

    if ($validator->fails()) { 
     return $validator->errors(); 
    } 

    return response()->json(['All good!']); 
} 

編集:これはすべてラベールがフードの下で行うことです。あなたは基本的にこの機能を直接ipの有効性を確認し、多くの労力を節約することができます。

protected function validateIp($ip) 
{ 
    return filter_var($ip, FILTER_VALIDATE_IP) !== false; 
} 
+0

これは私が探していたものです。もう1つ質問があります:私がこのプロジェクトで使っている 'ルーメン'には '\ Validator'クラスがありません。' Illuminate \ Validation \ Validator'は 'make'メソッドを提供していません。プロパティ '$ app-> withFacades();'が有効になっています。 – wujt

+1

私は 'Illuminate \ Support \ Facades \ Validator 'を使用しました。これは金のように機能します。ありがとうございました。 – wujt

+0

@wujtそれは良いですし、必要に応じて検証機能を追加しました。基本的なIP検証には多大な労力は必要ありません。 – Sandeesh

関連する問題