Skip to content

Commit

Permalink
remove ValidatesAttributes::$validationListenersRegistered
Browse files Browse the repository at this point in the history
  • Loading branch information
steven-fox committed May 28, 2024
1 parent c4e1698 commit 448159c
Showing 1 changed file with 20 additions and 17 deletions.
37 changes: 20 additions & 17 deletions src/ValidatesAttributes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Illuminate\Validation\Rules\Unique;
use Illuminate\Validation\ValidationException;
use Illuminate\Validation\Validator;
use StevenFox\LaravelModelValidation\Contracts\ValidatesWhenSaving;
use StevenFox\LaravelModelValidation\Exceptions\ModelValidationException;
use StevenFox\LaravelModelValidation\Listeners\ValidateModel;

Expand Down Expand Up @@ -36,11 +37,6 @@ trait ValidatesAttributes
*/
protected ?Validator $validator = null;

/**
* Indicates if the validation listeners have been registered.
*/
private static bool $validationListenersRegistered = false;

public static function bootValidatesAttributes(): void
{
self::registerValidatingEventListeners();
Expand All @@ -54,24 +50,22 @@ protected function initializeValidatesAttributes(): void
]);
}

private static function registerValidatingEventListeners(): void
protected static function registerValidatingEventListeners(): void
{
if (static::$validationListenersRegistered) {
return;
}

foreach (static::validatingListeners() as $event => $listener) {
static::{$event}($listener);
}

static::$validationListenersRegistered = true;
}

/**
* @return array<array-key, class-string|\Illuminate\Events\QueuedClosure|\Closure|array>
*/
protected static function validatingListeners(): array
{
if (! is_a(static::class, ValidatesWhenSaving::class, true)) {
return [];
}

// We specifically use the 'creating' and 'updating' events
// over the more general 'saving' event so that we don't
// redundantly validate a model that is "saved" without
Expand All @@ -91,13 +85,12 @@ public static function disableValidationWhenSaving(): void
public static function reactivateValidationWhenSaving(): void
{
static::$validateWhenSaving = true;

static::registerValidatingEventListeners();
}

public static function shouldValidateWhenSaving(): bool
{
return static::$validateWhenSaving;
return static::$validateWhenSaving
&& is_a(static::class, ValidatesWhenSaving::class, true);
}

public static function shouldNotValidateWhenSaving(): bool
Expand All @@ -121,15 +114,15 @@ public static function whileValidationDisabled(callable $callback): mixed
}

/**
* @param class-string|\Illuminate\Events\QueuedClosure|\Closure($this, Validator): void|array $callback
* @param class-string|\Illuminate\Events\QueuedClosure|\Closure($this, Validator): void|array $callback
*/
public static function validating(mixed $callback): void
{
static::registerModelEvent('validating', $callback);
}

/**
* @param class-string|\Illuminate\Events\QueuedClosure|\Closure($this, Validator): void|array $callback
* @param class-string|\Illuminate\Events\QueuedClosure|\Closure($this, Validator): void|array $callback
*/
public static function validated(mixed $callback): void
{
Expand Down Expand Up @@ -244,18 +237,28 @@ public function validationRules(): array
return array_merge($rules, $this->getMixinValidationRules());
}

/**
* Get the superseding validation rules.
*/
public function getSupersedingValidationRules(): ?array
{
return $this->supersedingValidationRules ?? null;
}

/**
* Set validation rules that will supersede (replace) all other rules
* for the model.
*/
public function setSupersedingValidationRules(array $rules): static
{
$this->supersedingValidationRules = $rules;

return $this;
}

/**
* Remove all superseding validation rules on the model.
*/
public function clearSupersedingValidationRules(): static
{
unset($this->supersedingValidationRules);
Expand Down

0 comments on commit 448159c

Please sign in to comment.