ホームページ  >  記事  >  バックエンド開発  >  Laravelでのリクエストの書き込み検証について詳しく解説

Laravelでのリクエストの書き込み検証について詳しく解説

黄舟
黄舟オリジナル
2017-10-26 10:32:411482ブラウズ

まえがき

この記事では、LaravelでAPIを書く際に、フロントエンドから渡されるリクエストがPOST/PUT/PATHなどのメソッドの場合に関連する内容を中心に紹介します。フロントエンドとバックエンドの分離プログラムでは、フロントエンド プログラムの Angular/Vue がすでに検証を行っていますが、ajax によって渡された json 入力もバックエンドで検証する必要があります。

では、リクエストの検証をエレガントに記述するにはどうすればよいでしょうか? laravelの公式ドキュメントにはすでにこの機能が含まれています: Form Request Validation

実装方法は次のとおりです

ここでJsonRequest:

class JsonRequest extends Illuminate\Foundation\Http\FormRequest
{
 public function rules()
 {
  $method = $this->method();
  
  assert(in_array($method, [static::METHOD_POST, static::METHOD_PUT, static::METHOD_PATCH], true));
  
  $controller = $this->route()->getController();
  $rules  = $controller::RULES;

  return ($rules[$this->method()] ?? []) + ($rules['*'] ?? []);
 }

 public function authorize()
 {
  return true;
 }
}

を書くことができます。この方法で、次のような多くのモデルコントローラーでJsonRequestを使用できます。

use Illuminate\Http\Request;

final class AccountController extends \App\Http\Controllers\Controller
{
 public const RULES = [
  Request::METHOD_POST => [
   'bank_account' => 'required_if:type,bank',
   'loan_account' => 'required_if:type,loan',
  ],
  Request::METHOD_PUT => [
   // ...
  ],
  '*' => [
   // ...
  ],
 ];
}

この方法で、フロントエンドから渡された json 入力が正当であるかどうかを検証できます。

(1) フロントエンドから渡された json 入力が

{
 "name": "lx1036",
 "type": "loan",
 "bank_account": {
  "source": "bank",
 }
}

の場合、検証は失敗し、不正です。

(2) フロントエンドから渡された json 入力が

{
 "name": "lx1036",
 "type": "bank",
 "loan_account": {
  "source": "loan",
 }
}

の場合、検証は失敗し、不正です。

このようにして、json 入力を検証できます。それが不正な場合は、HttpException が直接スローされ、ロジックの次のステップに入るために使用されなくなります。このようなネストされた JSON 入力の場合、リクエスト検証を使用してオブジェクト間の関係を検証することが重要です。これは、コアのビジネス ロジックに入る前の予備検証とみなすことができます。 。もちろん、テーブルを書き込むときに、不正なデータがデータベースに入力されるのを防ぐためにモデルの検証も行われます。

最後の点、laravelのドキュメントでは使用方法についてのみ説明されており、原則については説明されていません。コードは IlluminateFoundationProvidersFormRequestServiceProvider::class:

 public function boot()
 {
  // \Illuminate\Foundation\Http\FormRequest use 了 ValidatesWhenResolvedTrait,extends 了 \Illuminate\Contracts\Validation\ValidatesWhenResolved
  $this->app->afterResolving(ValidatesWhenResolved::class, function ($resolved) {
   $resolved->validate();
  });

  // ...
 }

にあるので、IlluminateFoundationHttpFormRequest がコンテナから解決されると、すぐに IlluminateFoundationHttpFormRequest::validate() メソッドが実行されます。詳細は詳しくありませんが、laravel のソース コードを確認できます。

OK、つまり、プログラムを書くとき、検証は非常に重要であり、リクエストの検証やモデルの検証を含めて記述する必要があります。 。 。

概要

以上がLaravelでのリクエストの書き込み検証について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。