6) { return false; } /** * Identify all sections of the pattern. */ $type = $parts[0] ?? false; $resource = $parts[1] ?? false; $hasSubResource = $count > 3 && ($events[$type]['$resource'] ?? false) && ($events[$type][$parts[2]]['$resource'] ?? false); if (!$type || !$resource) { return false; } if ($hasSubResource) { $subType = $parts[2]; $subResource = $parts[3]; if ($count === 6) { $attribute = $parts[5]; } } else { if ($count === 4) { $attribute = $parts[3]; } } $subType ??= false; $subResource ??= false; $attribute ??= false; $action = match (true) { !$hasSubResource && $count > 2 => $parts[2], $hasSubResource && $count > 4 => $parts[4], default => false }; if (!\array_key_exists($type, $events)) { return false; } if ($subtype ?? false) { if ($action && !\array_key_exists($action, $events[$type][$subType])) { return false; } if (!($subResource ?? false) || !\array_key_exists($subType, $events[$type])) { return false; } } else { if ($action && !\array_key_exists($action, $events[$type])) { return false; } } if ($attribute ?? false) { if ( !\array_key_exists($attribute, $events[$type][$action]) || (($subType ?? false) && !\array_key_exists($attribute, $events[$type][$subType][$action])) ) { return false; } } return true; } /** * Is array * * Function will return true if object is array. * * @return bool */ public function isArray(): bool { return false; } /** * Get Type * * Returns validator type. * * @return string */ public function getType(): string { return self::TYPE_STRING; } }