InvokableValidationRule.php
TLDR
The InvokableValidationRule.php
file defines the InvokableValidationRule
class, which is responsible for creating implicit or explicit invokable validation rules. This class implements the Rule
and ValidatorAwareRule
interfaces and provides methods for validating attributes, retrieving the underlying invokable rule, getting validation error messages, and setting the data under validation and the current validator.
Methods
make
The make
method is a static method that creates a new implicit or explicit InvokableValidationRule
. It accepts a ValidationRule
or InvokableRule
instance as the parameter and returns an instance of InvokableValidationRule
or an anonymous class extending InvokableValidationRule
depending on whether the invokable is set to be implicit.
passes
The passes
method is responsible for determining if the validation rule passes. It accepts the attribute name and value to be validated and returns a boolean value indicating if the validation passed or not. Inside this method, the invokable rule is executed with the specified attribute and value, and if the invokable rule fails, the failed flag is set and the pending potentially translated string is returned.
invokable
The invokable
method returns the underlying invokable rule.
message
The message
method returns the validation error messages.
setData
The setData
method sets the data under validation. It accepts an array of data and returns the instance of InvokableValidationRule
class for method chaining.
setValidator
The setValidator
method sets the current validator. It accepts an instance of the Validator
class and returns the instance of InvokableValidationRule
class for method chaining.
Classes
There are no classes defined in this file.
<?php
namespace 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\ValidationRule;
use Illuminate\Contracts\Validation\ValidatorAwareRule;
use Illuminate\Translation\CreatesPotentiallyTranslatedStrings;
class InvokableValidationRule implements Rule, ValidatorAwareRule
{
use CreatesPotentiallyTranslatedStrings;
/**
* The invokable that validates the attribute.
*
* @var \Illuminate\Contracts\Validation\ValidationRule|\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\ValidationRule|\Illuminate\Contracts\Validation\InvokableRule $invokable
* @return void
*/
protected function __construct(ValidationRule|InvokableRule $invokable)
{
$this->invokable = $invokable;
}
/**
* Create a new implicit or explicit Invokable validation rule.
*
* @param \Illuminate\Contracts\Validation\ValidationRule|\Illuminate\Contracts\Validation\InvokableRule $invokable
* @return \Illuminate\Contracts\Validation\Rule|\Illuminate\Validation\InvokableValidationRule
*/
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);
}
$method = $this->invokable instanceof ValidationRule
? 'validate'
: '__invoke';
$this->invokable->{$method}($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\ValidationRule|\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;
}
}