Skip to content

Instantly share code, notes, and snippets.

@paulofreitas
Last active April 1, 2017 11:37
Show Gist options
  • Save paulofreitas/8ea96cbe43e4d8f6d8a7 to your computer and use it in GitHub Desktop.
Save paulofreitas/8ea96cbe43e4d8f6d8a7 to your computer and use it in GitHub Desktop.

AbstractSanitizer.php

<?php

abstract class AbstractSanitizer
{
    protected $sanitizers = [];

    public function sanitize($data)
    {
        foreach ($this->sanitizers as $sanitizer) {
            $method = 'sanitize' . $sanitizer;

            if (method_exists($this, $method)) {
                $data = call_user_func([$this, $method], $data);
            }
        }

        return $data;
    }
}

UserSanitizer.php

<?php

class UserSanitizer extends AbstractSanitizer
{
    protected $sanitizers = [
        'email',
    ];

    public function sanitizeEmail($data)
    {
        if (isset($data['email'])) {
            $data['email'] = strtolower($data['email']);
        }

        return $data;
    }
}

AbstractValidator.php

<?php

abstract class AbstractValidator
{
    protected $sanitizers = [];

    public function attachSanitizer(AbstractSanitizer $sanitizer)
    {
        $this->sanitizers[] = $sanitizer;

        return $this;
    }

    protected function runSanitizers(&$data)
    {
        foreach ($this->sanitizers as $sanitizer) {
            $sanitizer->sanitize($data);
        }
    }
}

UserValidator.php

<?php

class UserValidator extends AbstractValidator
{
    public function __construct(UserSanitizer $userSanitizer)
    {
        $this->attachSanitizer($userSanitizer);

        parent::__construct();
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment