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:----fNDGp36Pczbs9GY+e90hAEGOyOgSyYmGL0UCh8W3jvAcsGTt4XDuGK/oQ8vAquOIAjTlLfUP9uOMlZNlPJhgudx0w8xvfQHiwXQJ+ZrhVGsTib2URyRouUe0tDn7U9GEwIhdMeulNLUZ5ey76gKhSswuZnJ1XHTLKCqmtBfIDNkmva9TwdWqxe+omex2tT25YxfUR2R++8uAJe1AGNIdOLfr2X6lUcwCfNRK7Bba4WlFGXBcpW0W/38iqu2/DV2Sb3Z8+9kICq7pIyt4FRwMy7ylRgWgoTzGTifLBBhne+9WU/GTtiYEbLWpnqWDvn0rX5ctPpog5bQoXAO6uwEdlOUoB/GmHeJkCeinAB7Y3HnYpfopTAyHw6RatvXId2QwvYkPul88T5x0CLCvGBS1+PkYFcn0T7nURHZaAvbwsZZ2fq1f7MiW8rxU7jKLva74CFH471tkI+s0ig42y3f606vw8gIe1QzlrllJRI/7S+me6FmJ+AhJbEZXV8Gu/eGcJ9koaCQoklkIxePNc/5EVoflqzw7MVsslRi2QmepD4bJETKCl70K3ojv0eSwCx9cBd0CvQHmFL74b1niYlk91+DVs8HP9z+b1i9XCYhOOranmjpP+Hl6Xldwc95CDKL+bd7tQSw7m83yhEvuhIdL3vjeHuhl7wR06HoQOLnzEjI=----ATTACHMENT:----Nzc5MjEyNTkyMjkwMTExOSA4Nzg2MDc4MzYwMTM5MDU4IDQ0MDAzMTMyNDYwMjg5MDI=