data = $data; return $this; } public function __construct(protected ?ResourceSite $site = null) {} /** * Resolve the site. */ protected function site(): ?ResourceSite { if ($this->site instanceof ResourceSite) { return $this->site; } $site = Arr::get($this->data, 'site'); if (is_numeric($site)) { return ResourceSite::tryFrom(intval($site)); } return null; } /** * @param Closure(string): PotentiallyTranslatedString $fail */ public function validate(string $attribute, mixed $value, Closure $fail): void { $site = $this->site(); if (! $site instanceof ResourceSite) { 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')); } }