protected static function EntityCondition::validate in Drupal 8
Same name and namespace in other branches
- 9 core/modules/jsonapi/src/Query/EntityCondition.php \Drupal\jsonapi\Query\EntityCondition::validate()
Validates the filter has the required fields.
1 call to EntityCondition::validate()
- EntityCondition::createFromQueryParameter in core/
modules/ jsonapi/ src/ Query/ EntityCondition.php - Creates an EntityCondition object from a query parameter.
File
- core/
modules/ jsonapi/ src/ Query/ EntityCondition.php, line 138
Class
- EntityCondition
- A condition object for the EntityQuery.
Namespace
Drupal\jsonapi\QueryCode
protected static function validate($parameter) {
$valid_key_combinations = [
[
static::PATH_KEY,
static::VALUE_KEY,
],
[
static::PATH_KEY,
static::OPERATOR_KEY,
],
[
static::PATH_KEY,
static::VALUE_KEY,
static::OPERATOR_KEY,
],
];
$given_keys = array_keys($parameter);
$valid_key_set = array_reduce($valid_key_combinations, function ($valid, $set) use ($given_keys) {
return $valid ? $valid : count(array_diff($set, $given_keys)) === 0;
}, FALSE);
$has_operator_key = isset($parameter[static::OPERATOR_KEY]);
$has_path_key = isset($parameter[static::PATH_KEY]);
$has_value_key = isset($parameter[static::VALUE_KEY]);
$cacheability = (new CacheableMetadata())
->addCacheContexts([
'url.query_args:filter',
]);
if (!$valid_key_set) {
// Try to provide a more specific exception is a key is missing.
if (!$has_operator_key) {
if (!$has_path_key) {
throw new CacheableBadRequestHttpException($cacheability, "Filter parameter is missing a '" . static::PATH_KEY . "' key.");
}
if (!$has_value_key) {
throw new CacheableBadRequestHttpException($cacheability, "Filter parameter is missing a '" . static::VALUE_KEY . "' key.");
}
}
// Catchall exception.
$reason = "You must provide a valid filter condition. Check that you have set the required keys for your filter.";
throw new CacheableBadRequestHttpException($cacheability, $reason);
}
if ($has_operator_key) {
$operator = $parameter[static::OPERATOR_KEY];
if (!in_array($operator, static::$allowedOperators)) {
$reason = "The '" . $operator . "' operator is not allowed in a filter parameter.";
throw new CacheableBadRequestHttpException($cacheability, $reason);
}
if (in_array($operator, [
'IS NULL',
'IS NOT NULL',
]) && $has_value_key) {
$reason = "Filters using the '" . $operator . "' operator should not provide a value.";
throw new CacheableBadRequestHttpException($cacheability, $reason);
}
}
}