SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

人気のPHPフレームワークLaravelを習得しよう

Laravelにおけるバリデーションを理解しよう

人気のPHPフレームワークLaravelを習得しよう 第8回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 本連載ではPHPフレームワークのひとつであるLaravelを紹介していきます。Laravelは、「Web職人のためのフレームワーク」というキャッチコピーのもと、ここ数年で人気がうなぎ上りのフレームワークです。連載を通して、その人気の秘密を味わっていただこうと思います。第7回である前回は、エラーハンドラを紹介しました。今回は、Laravelのバリデーション機能を紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

Laravel7がリリース

 今回のテーマであるバリデーションの話に入る前に、Laravelがメジャーアップデートされたので、そちらを先に紹介します。

バージョン7での変更点

 3月3日に、Laravelのメジャーアップデートとなるバージョン7がリリースされました。第6回でバージョン6のリリースに関して紹介した際にも触れたように、Laravelはバージョン6から、セマンティックバージョニングを採用すると同時に、半年ごとのメジャーアップデートを謳っています。そして、後方互換性のない破壊的なアップデートを行う場合は、このメジャーアップデート時に含めることになっています。今回のバージョン7のリリースは、この半年ごとのリリーススケジュールに従ったものです。

 バージョン7での大きな変更点は、次の3点となっています。

  • 内部で利用するSymfony系のコンポーネントとしてバージョン5を利用。
  • 認証関係のスキャフォールディングを別パッケージ化。
  • Eloquentモデルの日付のシリアライズフォーマットを変更。

 さらに、PHPの最小バージョンを7.2.5としたり、Bladeのcomponentメソッドが変更になったり、CORSがデフォルトでサポートされたりなど、さまざまな変更がなされています。

本連載でのサンプルについて

 本連載中で紹介してきたサンプルコードは、本稿執筆時点での最新バージョンである7.6でも問題なく動作します。

 ただ、1点だけ変更されている部分があります。それは、前回の2ページ目で紹介した\App\Exceptions\Handlerクラスのメソッドの引数の型です。report()メソッドもrender()メソッドも引数$exceptionはException型でした。これが、バージョン7からはThrowable型に変更になっています。とはいえ、ExceptionはThrowableインターフェースを実装したクラスなため、前回紹介したエラーハンドラの考え方はそのまま通用します。

Laravelによるバリデーション

 さて、本題であるバリデーションに話を戻しましょう。

バリデーションとは

 バリデーションというのは、ずばり、入力チェックのことです。例えば、図1のような入力画面があるとします。

入力画面
図1: 入力画面

 4つの入力項目のうち、名前、身長、体重の入力は必須であり、身長と体重は数値を入力しなければならないとします。このような場合、もし必須項目が未入力であったり身長と体重に数値以外の値が入力されていたりしたら、これらの入力値を処理するプログラムが正常に動作しなくなる可能性があります。そこで、プログラムが正常に動作する値が入力されたかどうかをチェックする必要があります。また、不適切な値が入力された場合は、それを伝えるメッセージを表示させる必要があります。これがバリデーションです。

クライアントサイドとサーバサイドバリデーション

 バリデーションのうち、ブラウザ側で行うものをクライアントサイドバリデーション、サーバ側で行うものをサーバサイドバリデーションといいます。クライアントサイドバリデーションでは、JavaScriptによるバリデーションの他に、HTMLのフォーム関連タグに属性を記入することで、ブラウザ標準のバリデーションを行うことができます。例えば、図1の名前欄にあたるinputタグにrequired属性を付与するだけで、未入力のまま送信ボタンをクリックすると図2のようなメッセージが表示されます。

図2: 未入力のメッセージが表示された入力画面
図2: 未入力のメッセージが表示された入力画面

Laravelのバリデーションはサーバサイド

 このように、HTMLによるバリデーション属性をサポートしたブラウザを利用することで、かなりのバリデーションをプログラミングなしで行うことができます。ただ、クライアントサイドでの検証をすり抜けるのは比較的簡単です。確実に値を検証するには、サーバサイドバリデーションが必要になります。また、より細かなバリデーションを行おうとする場合は、サーバサイドでないと行うことができません。

 そして、これから紹介するLaravelによるバリデーションは、サーバサイドでのバリデーションです。サーバサイドでバリデーションを行う場合、当然ですが取得した入力値に対して、それらをチェックするプログラムを記述する必要があります。チェックした結果が不適切ならば、元の入力画面を表示させ、そこに何が不適切なのかをメッセージ(バリデーションメッセージ)として表示させるところまでプログラミングしなければなりません(図3)。

図3: サーバーサイドプログラミングにバリデーションを組み込むと…
図3: サーバサイドプログラミングにバリデーションを組み込むと…

 このように書くと単純に見えますが、バリデーションのコーディングはなかなか手間がかかるものです。そこでLaravelには、必須項目の入力チェックなど、よく行うバリデーションを自動化できる仕組みが備わっています。これを利用しない手はありません。

次のページ
Laravelによるバリデーションを組み込む方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
人気のPHPフレームワークLaravelを習得しよう連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12329 2020/06/05 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング