PluginTypeBasedConverterTrait.php in Plugin 8.2
File
src/ParamConverter/PluginTypeBasedConverterTrait.php
View source
<?php
namespace Drupal\plugin\ParamConverter;
use Drupal\Core\Utility\Error;
use Drupal\plugin\PluginType\PluginTypeManagerInterface;
use Symfony\Component\Routing\Route;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\Optional;
use Symfony\Component\Validator\Validation;
trait PluginTypeBasedConverterTrait {
protected $pluginTypeManager;
public function __construct(PluginTypeManagerInterface $plugin_type_manager) {
$this->pluginTypeManager = $plugin_type_manager;
}
public function convert($value, $definition, $name, array $defaults) {
$valid = $this
->validateParameterDefinition($definition);
if (!$valid) {
return FALSE;
}
$converter_definition = $this
->getConverterDefinition($definition);
if (is_null($converter_definition)) {
return NULL;
}
try {
return $this
->doConvert($value, $converter_definition, $name, $defaults);
} catch (\Exception $e) {
trigger_error(Error::renderExceptionSafe($e), E_USER_WARNING);
return NULL;
}
}
protected abstract function doConvert($value, array $converter_definition);
public function applies($definition, $name, Route $route) {
$valid = $this
->validateParameterDefinition($definition);
if (!$valid) {
return FALSE;
}
if (is_null($this
->getConverterDefinition($definition))) {
return FALSE;
}
return TRUE;
}
protected function getConverterDefinition(array $definition) {
if (!array_key_exists($this
->getConverterDefinitionKey(), $definition)) {
return NULL;
}
$converter_definition = $definition[$this
->getConverterDefinitionKey()];
$converter_definition += [
'enabled' => TRUE,
];
if (!$converter_definition['enabled']) {
return NULL;
}
return $converter_definition;
}
protected function validateParameterDefinition($definition) {
$validator = Validation::createValidator();
$constraint = new Collection([
'allowExtraFields' => TRUE,
'fields' => [
$this
->getConverterDefinitionKey() => new Optional($this
->getConverterDefinitionConstraint()),
],
]);
$violations = $validator
->validate($definition, $constraint);
foreach ($violations as $violation) {
trigger_error(sprintf("Error while validating the route parameter definition in item %s: %s\n\nOriginal data:\n%s", $violation
->getPropertyPath(), $violation
->getMessage(), var_export($violation
->getRoot(), TRUE)), E_USER_WARNING);
}
return count($violations) === 0;
}
protected abstract function getConverterDefinitionKey();
protected abstract function getConverterDefinitionConstraint();
}