【PHP】フォームバリデーションのライブラリなら、Valitronが便利です
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>