nora-lib / validation
v1.0.0
2025-12-28 05:55 UTC
Requires
- php: ^8.3.0
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.8
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2025-12-28 13:40:12 UTC
README
PHPバリデーションライブラリ - シンプルで拡張可能なバリデーション機能を提供
インストール
composer require nora-lib/validation
基本的な使い方
シンプルなバリデーション
use NoraLib\Validation\Validator;
$validator = new Validator();
// 空でないことをチェック
$emailValidator = $validator->notEmpty()->validEmail();
if ($emailValidator->validate($email)) {
echo "有効なメールアドレスです";
}
複数のルールを組み合わせる
$passwordValidator = $validator
->notEmpty()
->length(min: 8, max: 20)
->passwordStrength();
if (!$passwordValidator->validate($password)) {
// バリデーション失敗
}
配列のバリデーション
$userValidator = $validator->array([
'name' => $validator->notEmpty()->length(min: 2, max: 50),
'email' => $validator->validEmail(),
'age' => $validator->notEmpty(),
]);
$userData = [
'name' => 'John Doe',
'email' => 'john@example.com',
'age' => 25,
];
if ($userValidator->validate($userData)) {
echo "ユーザーデータは有効です";
}
エラーハンドリング
use NoraLib\Validation\Exception\ValidationalError;
use NoraLib\Validation\Rule\Exception\NotEmptyException;
use NoraLib\Validation\Rule\Exception\ExceptionGroup;
try {
$validator->notEmpty()->assert($value);
} catch (NotEmptyException $e) {
echo $e->getMessage(); // "入力してください。"
}
// 配列バリデーションのエラー
try {
$userValidator->assert($invalidData);
} catch (ExceptionGroup $e) {
$error = ValidationalError::createFromValidator($e);
$payload = $error->buildPayload(); // エラー詳細を取得
}
利用可能なバリデーションルール
notEmpty()- 空でないことをチェックlength(min, max)- 文字数チェックvalidEmail()- メールアドレス形式チェックvalidUrl()- URL形式チェックpasswordStrength()- パスワード強度チェックpasswordComplexity(complexity)- パスワード複雑性チェックpasswordNoCommonWord()- よくあるパスワードの除外regex(pattern, message)- 正規表現マッチングcustom(callback, message)- カスタムバリデーションfilter(filter)- PHPフィルター関数array(spec)- 配列バリデーションpolicy(name)- ポリシーベースバリデーション
ポリシーベースバリデーション
複数のルールをポリシーとして定義できます:
use NoraLib\Validation\Rule\LengthRule;
use NoraLib\Validation\Rule\PasswordComplexityRule;
use NoraLib\Validation\Rule\PasswordNoCommonWordRule;
use NoraLib\Validation\Rule\NotEmptyRule;
$validator = new Validator();
$validator->setPolicy('strong_password', [
new LengthRule(8, 20),
new PasswordComplexityRule(3),
new PasswordNoCommonWordRule(),
new NotEmptyRule(),
]);
$policyValidator = $validator->policy('strong_password');
if ($policyValidator->validate($password)) {
echo "強力なパスワードです";
}
カスタムバリデーションルール
独自のバリデーションルールを作成できます:
// カスタムルールを使用
$customValidator = $validator->custom(function($value) {
return $value === 'expected';
}, 'カスタムエラーメッセージ');
// または AbstractRule を継承してクラスを作成
use NoraLib\Validation\Rule\AbstractRule;
class MyCustomRule extends AbstractRule
{
public function __construct(
protected string $message = "エラーメッセージ"
) {
parent::__construct($message);
}
public function validate($value): bool
{
// カスタムロジック
return true;
}
}
BEAR.Sunday統合
NoraLib ValidationはBEAR.Sundayと簡単に統合できます。推奨アプローチは、JsonRestInterceptorパターンです。
特徴
- Ray.Validationの
@OnValidateで型安全性を確保 - NoraLib Validationの詳細なエラー情報を活用
- 統一されたJSONレスポンス構造
- エラーレベル別のログ出力
基本的な使い方
use BEAR\Resource\ResourceObject;
use Ray\Validation\Annotation\Valid;
use Ray\Validation\Annotation\OnValidate;
use NoraLib\Validation\Validator;
class Users extends ResourceObject
{
/**
* @Valid
*/
#[JsonRest]
public function onPost(array $userData): static
{
// バリデーション済みデータで処理
$userId = $this->createUser($userData);
$this->code = 201;
$this->body = ['id' => $userId];
return $this;
}
/**
* @OnValidate
*/
public function onValidatePost(mixed $userData): \Ray\Validation\Validation
{
// 型チェック
if (!is_array($userData)) {
throw new \NoraLib\Validation\Exception\ValidationalError(
input_key: 'userData',
message: 'Request body must be an array'
);
}
// NoraLib Validationで詳細チェック
$validator = new Validator();
$userValidator = $validator->array([
'email' => $validator->validEmail(),
'password' => $validator
->notEmpty()
->length(min: 12)
->passwordComplexity(4)
->passwordNoCommonWord(),
]);
$userValidator->assert($userData);
return new \Ray\Validation\Validation();
}
}
レスポンス例
成功時(HTTP 201):
{
"info": {"status": "ok"},
"payload": {"id": 123}
}
バリデーションエラー時(HTTP 422):
{
"info": {
"status": "error",
"message": "Validation failed"
},
"payload": {
"description": ["Invalid email format"],
"errors": [
{
"input": "email",
"label": "email",
"message": "Invalid email format"
}
]
}
}
詳細はBEAR.Sunday統合ガイドを参照してください。
テストカバレッジ
このライブラリは93%のテストカバレッジを達成しており、CI/CDで80%未満の場合はビルドが失敗します。
# テスト実行
composer test
# カバレッジ付きテスト
composer coverage
APIドキュメント
詳細なAPIドキュメントはGitLab Pagesで公開されています。
ライセンス
MIT License
開発
要件
- PHP ^8.3.0
セットアップ
git clone <repository-url>
cd validation
composer install
テスト
composer test # テスト実行
composer coverage # カバレッジ付きテスト
composer cs # コードスタイルチェック
composer sa # 静的解析
composer docs # APIドキュメント生成
ビルド
composer build # 全チェック + カバレッジ + メトリクス