ご存知のように、Laravel 5はvalidator
を呼び出す方法を変更しますが、古い方法はvalidator facade
ですが、現在は基本コントローラクラスにValidatesRequests
特性がありますが、validate
メソッドはリクエストを値の配列として受け入れますが、ルートパラメータを定義すると、これらの値は保存されませんRequest
では、これらのパラメーターをどのように検証できますか?
編集:
ルート:
Route::get('/react-api/{username}', 'ProfileController@getUsername');
コントローラ:
public function getUsername(Request $request, $username)
{
$v = $this->validate($request, ['username' => 'required']);
}
では、このユーザー名パラメーターを検証するにはどうすればよいですか?
マニックスの答えは私にとってうまくいかなかった、私はイリヤスと同じ問題を抱えていた。問題は、ルートパラメータがFormRequestで自動的に利用できないことです。特定のFormRequestクラスでall()関数をオーバーライドすることになりました。
public function all()
{
// Include the next line if you need form data, too.
$request = Input::all();
$request['username'] = $this->route('username');
return $request
}
次に、通常どおりルールをコーディングできます。
public function rules()
{
return [
'username' => 'required',
];
}
public function listTurns($doctor_id, $limit, $offset){
$r = [
'doctor_id' => $doctor_id,
'limit' => $limit,
'offset' => $offset,
];
$validator = Validator::make($r, [
'doctor_id' => 'required|numeric|min:1|exists:doctors,id',
'limit' => 'required|numeric|min:1',
'offset' => 'required|numeric|min:0',
]);
}
use Validator;
public function getUsername($username)
{
$validator = Validator::make(['username' => $username], [
'username' => 'required|string'
]);
if ($validator->fails()) {
return response()->json(['success' => false, 'errors' => $validator->messages()], 422);
}
}
次のルートを想定します。
Route::get('profile/{id}', 'ProfileController@show');
id
パラメーターをL4の方法として検証することもできます。
public function show(){
$validator = \Validator::make(
\Input::all(),
[
'id' => ['required', 'numeric']
]
);
// run validator here
}
具体的なデータを検証する必要がある場合は、次の例をご覧ください。
public function getUsername(Request $request, $username)
{
$validator = \Validator::make(
[
'username' => $username
],
[
'username' => ['required']
]
);
// run the validator here
}
L5では、他の2つの方法で行うことができます。 1つ目は、コントローラーに挿入されたジェネリックRequest
クラスを使用します。
public function show(Request $request){
$this->validate($request, [
'id' => ['required', 'numeric']
]);
// do stuff here, everything was ok
}
L5では、要求を受け取るvalidate()関数を呼び出すことができ、その上で実行するルールを使用できます。この関数は実行ルールを担当します。いくつかのルールが失敗した場合、ユーザーは前のリクエストにリダイレクトされます
最後に、2番目のオプションとして、 Form request validation を使用できます。すべてのGETおよびPOST値は、Requestクラスを介してアクセスできます。