Written by Manabu Bannai

【PHP】フォームバリデーションのライブラリなら、Valitronが便利です

PHP PROGRAMMING

PHPでフォームバリデーションを作るのってめんどいですよね。良さげなライブラリ探してたら見つけたので、使い方とともにシェアします。
» vlucas/valitron: Valitron is a simple, elegant, stand-alone validation library with NO dependencies

PHP製のバリデーションライブラリで重視したポイント

  • シンプルに書けること
  • エラーメッセージが簡単に日本語化できること
  • インストールが簡単であること

Valitronの使い方イメージ

<?php
$v = new Valitron\Validator($_POST);
// Input array
$v->rule('required', ['name', 'email', 'date_start']);
$v->rule('email', 'email'); // Email uses filter_var
$v->rule('dateAfter', 'date_start', new \DateTime()); // After today
if($v->validate()) {
     echo "Yay! We're all good!";
     print_r($v->data());
} else {
     // Errors
     print_r($v->errors());
}

公式サイトよりコピペですが上記のとおり。見た目がスッキリしていて見やすいですよね。シンプルなだけではなく、必要最低限の機能もついています。

Valitronのインストール方法

{
    "require": {
        "vlucas/valitron": "dev-master"
    }
}

Composerでインストールします。これで完了。

Valitronの読み込み方法

下記のとおりです。

<?php
require_once( 'vendor/autoload.php' );

// Valitronクラスを実行する
$v = new Valitron\Validator($_POST);

Valitronのバリデーションサンプル

サンプルをつくっていきます。

テストで利用するフォームを作る

<form action="" method="post">
	<input type="text" name="name" placeholder="名前">
	<input type="email" name="email" placeholder="Email">
	<input type="password" name="password" placeholder="パスワード">
	<input type="password_again" name="password_again" placeholder="パスワードの再入力">
	<input type="submit" value="送信">
</form>

バリデーションの書き方の例

<?php
require_once( 'vendor/autoload.php' );

// Valitronクラスを実行する
$v = new Valitron\Validator($_POST);

// 入力必須の項目が記入されているか確認する
$v->rule('required', ['name', 'email', 'password']);

// 入力された文字がemailかどうかをフィルターで確認する
$v->rule('email', 'email');

// パスワードとパスワード再入力が一致しているかを確認する
$v->rule('equals', 'password', 'password_again');

バリデーションメッセージを日本語化する

<?php
require_once( 'vendor/autoload.php' );

// Valitronクラスを実行する
$v = new Valitron\Validator($_POST);

// 入力必須の項目が記入されているか確認する
$v->rule('required', ['name', 'email', 'password'])->message('{field}は必須です');

// 入力された文字がemailかどうかをフィルターで確認する
$v->rule('email', 'email')->message('{field}が不正です');

// パスワードとパスワード再入力が一致しているかを確認する
$v->rule('equals', 'password', 'password_again')->message('{field}が一致しません');

// エラーメッセージを日本語化する
$v->labels(array(
	'name' => '名前',
	'email' => 'メールアドレス',
	'password' => 'パスワード'
));

多分この書き方のほうが見やすいので公式サイトの方法は無視しています。

エラー表示の方法

// バリデーションを実行
if($v->validate()) {
	echo "エラーなし!\(^o^)/";
	// print_r($v->data());
} else {
	// echo $v->errors()['name'][0];

	foreach ($v->errors() as $error) {
		// var_dump($error);
		foreach ($error as $value) {
			// var_dump($value);
			echo $value;
		}
	}
}

以上となります。最後にまとめたコードを貼っておきます。

<?php
require_once( 'vendor/autoload.php' );

// Valitronクラスを実行する
$v = new Valitron\Validator($_POST);

// 入力必須の項目が記入されているか確認する
$v->rule('required', ['name', 'email', 'password'])->message('{field}は必須です');

// 入力された文字がemailかどうかをフィルターで確認する
$v->rule('email', 'email')->message('{field}が不正です');

// パスワードとパスワード再入力が一致しているかを確認する
$v->rule('equals', 'password', 'password_again')->message('{field}が一致しません');

// エラーメッセージを日本語化する
$v->labels(array(
	'name' => '名前',
	'email' => 'メールアドレス',
	'password' => 'パスワード'
));

// バリデーションを実行
if($v->validate()) {
	echo "エラーなし!\(^o^)/";
	// print_r($v->data());
} else {
	// echo $v->errors()['name'][0];

	foreach ($v->errors() as $error) {
		// var_dump($error);
		foreach ($error as $value) {
			// var_dump($value);
			echo $value;
		}
	}
}
?>

<form action="" method="post">
	<input type="text" name="name" placeholder="名前">
	<input type="email" name="email" placeholder="Email">
	<input type="password" name="password" placeholder="パスワード">
	<input type="password_again" name="password_again" placeholder="パスワードの再入力">
	<input type="submit" value="送信">
</form>