/ app / Rules / ValidateAdditionalComponents.php
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  }