@@ -22,6 +22,11 @@ final class UuidFilter
2222 */
2323 const FILTER_ERROR_FORMAT = "Value '%s' is not a valid UUID. Versions checked (%s) " ;
2424
25+ /**
26+ * @var string
27+ */
28+ const NIL_NOT_ALLOWED_ERROR_FORMAT = "Value '%s' is nil uuid, but nil values are not allowed. " ;
29+
2530 /**
2631 * @var string
2732 */
@@ -32,6 +37,11 @@ final class UuidFilter
3237 */
3338 const UNSUPPORTED_VERSION_ERROR_FORMAT = 'Filter does not support UUID v%d ' ;
3439
40+ /**
41+ * @var string
42+ */
43+ const NIL_UUID = '00000000-0000-0000-0000-000000000000 ' ;
44+
3545 /**
3646 * @var array
3747 * @internal
@@ -44,6 +54,7 @@ final class UuidFilter
4454 *
4555 * @param string|null $value The value to be filtered.
4656 * @param bool $allowNull Flag to allow value to be null.
57+ * @param bool $allowNil Flag to allow value to be a NIL UUID.
4758 * @param array $versions List of specific UUID version to validate against.
4859 *
4960 * @return string|null
@@ -53,12 +64,17 @@ final class UuidFilter
5364 public static function filter (
5465 string $ value = null ,
5566 bool $ allowNull = false ,
67+ bool $ allowNil = false ,
5668 array $ versions = self ::VALID_UUID_VERSIONS
5769 ) {
5870 if (self ::valueIsNullAndValid ($ allowNull , $ value )) {
5971 return null ;
6072 }
6173
74+ if (self ::valueIsNilAndValid ($ allowNil , $ value )) {
75+ return self ::NIL_UUID ;
76+ }
77+
6278 self ::validateVersions ($ versions );
6379 foreach ($ versions as $ version ) {
6480 $ pattern = sprintf (self ::UUID_PATTERN_FORMAT , $ version );
@@ -85,6 +101,15 @@ private static function valueIsNullAndValid(bool $allowNull, string $value = nul
85101 return $ allowNull === true && $ value === null ;
86102 }
87103
104+ private static function valueIsNilAndValid (bool $ allowNil , string $ value = null ): bool
105+ {
106+ if ($ allowNil === false && $ value === self ::NIL_UUID ) {
107+ throw new FilterException (sprintf (self ::NIL_NOT_ALLOWED_ERROR_FORMAT , $ value ));
108+ }
109+
110+ return $ allowNil === true && $ value === self ::NIL_UUID ;
111+ }
112+
88113 private static function validateVersions (array $ versions )
89114 {
90115 foreach ($ versions as $ version ) {
0 commit comments