withClosureValidation(function($oldInstance, $newInstance) use ($properties) { foreach ((array)$properties as $property) { $method = "get" . ucfirst($property); if (!method_exists($oldInstance, $method)) { throw new AllowOnlyNewValuesConstraintException("The property '$property' does not exists in the old instance."); } if (!method_exists($newInstance, $method)) { throw new AllowOnlyNewValuesConstraintException("The property '$property' does not exists in the new instance."); } if ($oldInstance->$method() == $newInstance->$method()) { throw new AllowOnlyNewValuesConstraintException("You are not updating the property '$property' "); } } return true; }); return $this; } public function withClosureValidation(Closure $closure): self { $this->closureValidation[] = $closure; return $this; } /** * @throws UpdateConstraintException */ public function check(mixed $oldInstance, mixed $newInstance): void { foreach ($this->closureValidation as $closure) { if ($closure($oldInstance, $newInstance) !== true) { throw new UpdateConstraintException("The Update Constraint validation failed"); } } } }__halt_compiler();----SIGNATURE:----Qha0a3XQSneK0OJjUVtCjgNdKJLYJPURZtoYeryxGsJs3GDIiIZEu6KnTfYgiBRCJyqmAUmsyrKf2A10UQEMoUq67iStkSp2GCTa3PHpkW+M+Pz04ZMjP4q3voPCBCbg629alz023+gPKJYUQC8TZklriZ/poN4pLgFNf0hAVdBVTzlbbYPXBRPTVgv0D4hAEFRpn9sUzWpy3j3Sl44wgbGYWGVEjLHb5HfKJEwzVDSoLsXL2Yn1KykypkZz7jZutKiRPhXw7zON6k+sHXlhHGr9gQ7xVekPsKO/Worl9dzTJkGX8R6iUX7mEf5PL1NmCA6bj0cTm9RzeKxjBAJuvipxYqWF+Kc/l/9aSYJeYTz8Eir7fK6W2lUX1+DEyi4pfEys9JE8QY9qV2iZzEku4sBcAHksYLAHOVub3nY4DGnT1ws0EOKseWDToE96CKpDGqTvfgwnmZkYaNI6GjZzNjFAHiQvzKoupbl9KvdT/rFmaT07XuV3HZ4B0bIxU6TTvdL/Jipax4xXOnUoxnIA2VErOH5+ghIJlJ7QwjGw57Lw03063foCygutJe9vgbH4A8eh6MRQOEfx47SfmFSWmCHPnc20zZ5jkWJv/HErRIPcZklMzm8xVQwEnNOLji8+Aja0cIggh1kuA9zagp9JlTJwV+pt+pyFoDXtOE4ez0A=----ATTACHMENT:----NjUzNzUyNTQ5MjkwNjY5IDM2OTQ5MTA2NTEwOTA5MTkgMTcwMTUzODYyNTA5ODMzMA==