Revision 150 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Validation;use Illuminate\Contracts\Validation\DataAwareRule;use Illuminate\Contracts\Validation\ImplicitRule;use Illuminate\Contracts\Validation\InvokableRule;use Illuminate\Contracts\Validation\Rule;use Illuminate\Contracts\Validation\ValidatorAwareRule;use Illuminate\Translation\PotentiallyTranslatedString;class InvokableValidationRule implements Rule, ValidatorAwareRule{/*** The invokable that validates the attribute.** @var \Illuminate\Contracts\Validation\InvokableRule*/protected $invokable;/*** Indicates if the validation invokable failed.** @var bool*/protected $failed = false;/*** The validation error messages.** @var array*/protected $messages = [];/*** The current validator.** @var \Illuminate\Validation\Validator*/protected $validator;/*** The data under validation.** @var array*/protected $data = [];/*** Create a new explicit Invokable validation rule.** @param \Illuminate\Contracts\Validation\InvokableRule $invokable* @return void*/protected function __construct(InvokableRule $invokable){$this->invokable = $invokable;}/*** Create a new implicit or explicit Invokable validation rule.** @param \Illuminate\Contracts\Validation\InvokableRule $invokable* @return \Illuminate\Contracts\Validation\Rule*/public static function make($invokable){if ($invokable->implicit ?? false) {return new class($invokable) extends InvokableValidationRule implements ImplicitRule {};}return new InvokableValidationRule($invokable);}/*** Determine if the validation rule passes.** @param string $attribute* @param mixed $value* @return bool*/public function passes($attribute, $value){$this->failed = false;if ($this->invokable instanceof DataAwareRule) {$this->invokable->setData($this->validator->getData());}if ($this->invokable instanceof ValidatorAwareRule) {$this->invokable->setValidator($this->validator);}$this->invokable->__invoke($attribute, $value, function ($attribute, $message = null) {$this->failed = true;return $this->pendingPotentiallyTranslatedString($attribute, $message);});return ! $this->failed;}/*** Get the underlying invokable rule.** @return \Illuminate\Contracts\Validation\InvokableRule*/public function invokable(){return $this->invokable;}/*** Get the validation error messages.** @return array*/public function message(){return $this->messages;}/*** Set the data under validation.** @param array $data* @return $this*/public function setData($data){$this->data = $data;return $this;}/*** Set the current validator.** @param \Illuminate\Validation\Validator $validator* @return $this*/public function setValidator($validator){$this->validator = $validator;return $this;}/*** Create a pending potentially translated string.** @param string $attribute* @param string|null $message* @return \Illuminate\Translation\PotentiallyTranslatedString*/protected function pendingPotentiallyTranslatedString($attribute, $message){$destructor = $message === null? fn ($message) => $this->messages[] = $message: fn ($message) => $this->messages[$attribute] = $message;return new class($message ?? $attribute, $this->validator->getTranslator(), $destructor) extends PotentiallyTranslatedString{/*** The callback to call when the object destructs.** @var \Closure*/protected $destructor;/*** Create a new pending potentially translated string.** @param string $message* @param \Illuminate\Contracts\Translation\Translator $translator* @param \Closure $destructor*/public function __construct($message, $translator, $destructor){parent::__construct($message, $translator);$this->destructor = $destructor;}/*** Handle the object's destruction.** @return void*/public function __destruct(){($this->destructor)($this->toString());}};}}