Skip to content

Validator For Real World

Shesh Ghimire edited this page Sep 13, 2024 · 6 revisions

Using Defaults

This example uses valid Payment Cards from library and assumes Luhn Validator package is installed.

💡 Even if Luhn package is not installed, the validation returns the same result. Its just Luhn Validation is skipped.

namespace App\Validation;

use TheWebSolver\Codegarage\PaymentCard\Traits\CardResolver;
use TheWebSolver\Codegarage\PaymentCard\CardInterface as Card;
use TheWebSolver\Codegarage\PaymentCard\CardFactory as Factory;

class DefaultValidator {
    use CardResolver;

    private const PAYLOAD = 'Src/Resource/paymentCards.json';

    public function __construct(?array $allowedCards = null, Factory $factory = new Factory()) {
        if (empty($allowedCards)) {
            return;
        }

        $this->withoutDefaults();

        $factory = $factory->withPayload(self::PAYLOAD);
        $cards   = [];

        foreach ($allowedCards as $key) {
            $cards[] = $factory->createCard(index: $key);
        }

        $this->setCards(...$cards);
    }

    public function validate(string|int $cardNumber): bool {
        return $this->resolveCardFromNumber((string) $cardNumber) instanceof Card;
    }
}

// All default cards are allowed.
$validator = new DefaultValidator();
$isValid   = $validator->validate(cardNumber: /*Master Card*/ 5105105105105100); // true

// Only three cards are allowed.
$validator = new DefaultValidator(allowedCards: ['americanExpress', 'dinersClub', 'visa']);
$isValid   = $validator->validate(cardNumber: /*Master Card*/ 5105105105105100);     // false
$isValid   = $validator->validate(cardNumber: /*American Express*/ 378282246310005); // true
Clone this wiki locally