web-dev-qa-db-ja.com

Laravel 5のルートパラメータを検証する方法は?

ご存知のように、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']);
}

では、このユーザー名パラメーターを検証するにはどうすればよいですか?

16
Iliyass Hamza

マニックスの答えは私にとってうまくいかなかった、私はイリヤスと同じ問題を抱えていた。問題は、ルートパラメータが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',
    ];
}
5
Mitch
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',
        ]);
}
2
Mahdyfo
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);
    }
}
0
Elqolbi

次のルートを想定します。

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クラスを介してアクセスできます。

0
manix