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();
}
}