ValidateAdditionalComponents.php
1 <?php 2 3 namespace App\Rules; 4 5 use App\Models\Norm; 6 use Illuminate\Contracts\Validation\InvokableRule; 7 8 class ValidateAdditionalComponents implements InvokableRule 9 { 10 public function __construct(public ?Norm $norm, public string $separator = ';') 11 { 12 // 13 } 14 /** 15 * Run the validation rule. 16 * 17 * @param string $attribute 18 * @param mixed $value 19 * @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail 20 * @return void 21 */ 22 public function __invoke($attribute, $value, $fail) 23 { 24 $workbookNames = $this->norm->workbooks()->pluck('name'); 25 26 foreach (explode($this->separator, $value) as $substring) { 27 if (!$workbookNames->contains($substring)) { 28 $fail('No workbook named ' . $substring); 29 return; 30 } 31 } 32 } 33 }