data = $data; return $this; } /** * Create a new rule instance. * * @param ResourceSite|null $site */ public function __construct(protected ?ResourceSite $site = null) { } /** * Resolve the site. * * @return ResourceSite|null */ protected function site(): ?ResourceSite { if ($this->site !== null) { return $this->site; } $site = Arr::get($this->data, 'site'); if (is_numeric($site)) { return ResourceSite::tryFrom(intval($site)); } return null; } /** * Run the validation rule. * * @param string $attribute * @param mixed $value * @param Closure(string): PotentiallyTranslatedString $fail * @return void */ public function validate(string $attribute, mixed $value, Closure $fail): void { $site = $this->site(); if ($site === null) { return; } $key = Str::of($attribute)->explode('.')->last(); $rules = [ new AnimeResourceLinkFormatRule($site), new ArtistResourceLinkFormatRule($site), new SongResourceLinkFormatRule($site), new StudioResourceLinkFormatRule($site), ]; foreach ($rules as $rule) { $validator = Validator::make( [$key => $value], [$key => $rule] ); if ($validator->passes()) { return; } } $fail(__('validation.regex')); } }