FapiValidationFiltersManager.php in Form API Validation 8.2
File
src/FapiValidationFiltersManager.php
View source
<?php
namespace Drupal\fapi_validation;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\DefaultPluginManager;
class FapiValidationFiltersManager extends DefaultPluginManager {
public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
$this
->alterInfo('fapi_validation_filters_info');
$this
->setCacheBackend($cache_backend, 'fapi_validation_filters');
parent::__construct('Plugin/FapiValidationFilter', $namespaces, $module_handler, 'Drupal\\fapi_validation\\FapiValidationFiltersInterface', 'Drupal\\fapi_validation\\Annotation\\FapiValidationFilter');
}
public function hasFilter($id) {
return in_array($id, array_keys($this
->getDefinitions()));
}
public function filter(array &$element, FormStateInterface &$form_state) {
$def = $element['#filters'];
foreach ($def as $filter_name) {
if (!$this
->hasFilter($filter_name)) {
throw new \LogicException("Invalid filter name '{$filter_name}'.");
}
$plugin = $this
->getDefinition($filter_name);
$instance = $this
->createInstance($plugin['id']);
$current_value = $form_state
->getValue($element['#parents']);
$new_value = $instance
->filter($current_value);
$element['#value'] = $new_value;
$form_state
->setValue($element['#parents'], $new_value);
}
}
}