Файл: vendor/laravel/framework/src/Illuminate/Validation/Rule.php
Строк: 538
<?php
namespace IlluminateValidation;
use IlluminateContractsSupportArrayable;
use IlluminateSupportArr;
use IlluminateSupportTraitsMacroable;
use IlluminateValidationRulesAnyOf;
use IlluminateValidationRulesArrayRule;
use IlluminateValidationRulesCan;
use IlluminateValidationRulesDate;
use IlluminateValidationRulesDimensions;
use IlluminateValidationRulesEmail;
use IlluminateValidationRulesEnum;
use IlluminateValidationRulesExcludeIf;
use IlluminateValidationRulesExcludeUnless;
use IlluminateValidationRulesExists;
use IlluminateValidationRulesFile;
use IlluminateValidationRulesImageFile;
use IlluminateValidationRulesIn;
use IlluminateValidationRulesNotIn;
use IlluminateValidationRulesNumeric;
use IlluminateValidationRulesProhibitedIf;
use IlluminateValidationRulesProhibitedUnless;
use IlluminateValidationRulesRequiredIf;
use IlluminateValidationRulesRequiredUnless;
use IlluminateValidationRulesStringRule;
use IlluminateValidationRulesUnique;
class Rule
{
use Macroable;
/**
* Get a can constraint builder instance.
*
* @param string $ability
* @param mixed ...$arguments
* @return IlluminateValidationRulesCan
*/
public static function can($ability, ...$arguments)
{
return new Can($ability, $arguments);
}
/**
* Apply the given rules if the given condition is truthy.
*
* @param callable|bool $condition
* @param IlluminateContractsValidationValidationRule|IlluminateContractsValidationInvokableRule|IlluminateContractsValidationRule|Closure|array|string $rules
* @param IlluminateContractsValidationValidationRule|IlluminateContractsValidationInvokableRule|IlluminateContractsValidationRule|Closure|array|string $defaultRules
* @return IlluminateValidationConditionalRules
*/
public static function when($condition, $rules, $defaultRules = [])
{
return new ConditionalRules($condition, $rules, $defaultRules);
}
/**
* Apply the given rules if the given condition is falsy.
*
* @param callable|bool $condition
* @param IlluminateContractsValidationValidationRule|IlluminateContractsValidationInvokableRule|IlluminateContractsValidationRule|Closure|array|string $rules
* @param IlluminateContractsValidationValidationRule|IlluminateContractsValidationInvokableRule|IlluminateContractsValidationRule|Closure|array|string $defaultRules
* @return IlluminateValidationConditionalRules
*/
public static function unless($condition, $rules, $defaultRules = [])
{
return new ConditionalRules($condition, $defaultRules, $rules);
}
/**
* Get an array rule builder instance.
*
* @param array|null $keys
* @return IlluminateValidationRulesArrayRule
*/
public static function array($keys = null)
{
return new ArrayRule(...func_get_args());
}
/**
* Create a new nested rule set.
*
* @param callable $callback
* @return IlluminateValidationNestedRules
*/
public static function forEach($callback)
{
return new NestedRules($callback);
}
/**
* Get a unique constraint builder instance.
*
* @param string $table
* @param string $column
* @return IlluminateValidationRulesUnique
*/
public static function unique($table, $column = 'NULL')
{
return new Unique($table, $column);
}
/**
* Get an exists constraint builder instance.
*
* @param string $table
* @param string $column
* @return IlluminateValidationRulesExists
*/
public static function exists($table, $column = 'NULL')
{
return new Exists($table, $column);
}
/**
* Get an in rule builder instance.
*
* @param IlluminateContractsSupportArrayable|UnitEnum|array|string $values
* @return IlluminateValidationRulesIn
*/
public static function in($values)
{
if ($values instanceof Arrayable) {
$values = $values->toArray();
}
return new In(is_array($values) ? $values : func_get_args());
}
/**
* Get a not_in rule builder instance.
*
* @param IlluminateContractsSupportArrayable|UnitEnum|array|string $values
* @return IlluminateValidationRulesNotIn
*/
public static function notIn($values)
{
if ($values instanceof Arrayable) {
$values = $values->toArray();
}
return new NotIn(is_array($values) ? $values : func_get_args());
}
/**
* Get a required_if rule builder instance.
*
* @param (Closure(): bool)|bool $callback
* @return IlluminateValidationRulesRequiredIf
*/
public static function requiredIf($callback)
{
return new RequiredIf($callback);
}
/**
* Get a required_unless rule builder instance.
*
* @param (Closure(): bool)|bool|null $callback
* @return IlluminateValidationRulesRequiredUnless
*/
public static function requiredUnless($callback)
{
return new RequiredUnless($callback);
}
/**
* Get a exclude_if rule builder instance.
*
* @param (Closure(): bool)|bool $callback
* @return IlluminateValidationRulesExcludeIf
*/
public static function excludeIf($callback)
{
return new ExcludeIf($callback);
}
/**
* Get a exclude_unless rule builder instance.
*
* @param (Closure(): bool)|bool $callback
* @return IlluminateValidationRulesExcludeUnless
*/
public static function excludeUnless($callback)
{
return new ExcludeUnless($callback);
}
/**
* Get a prohibited_if rule builder instance.
*
* @param (Closure(): bool)|bool $callback
* @return IlluminateValidationRulesProhibitedIf
*/
public static function prohibitedIf($callback)
{
return new ProhibitedIf($callback);
}
/**
* Get a prohibited_unless rule builder instance.
*
* @param (Closure(): bool)|bool $callback
* @return IlluminateValidationRulesProhibitedUnless
*/
public static function prohibitedUnless($callback)
{
return new ProhibitedUnless($callback);
}
/**
* Get a date rule builder instance.
*
* @return IlluminateValidationRulesDate
*/
public static function date()
{
return new Date;
}
/**
* Get a datetime rule builder instance.
*/
public static function dateTime(): Date
{
return (new Date)->format('Y-m-d H:i:s');
}
/**
* Get an email rule builder instance.
*
* @return IlluminateValidationRulesEmail
*/
public static function email()
{
return new Email;
}
/**
* Get an enum rule builder instance.
*
* @param class-string $type
* @return IlluminateValidationRulesEnum
*/
public static function enum($type)
{
return new Enum($type);
}
/**
* Get a file rule builder instance.
*
* @return IlluminateValidationRulesFile
*/
public static function file()
{
return new File;
}
/**
* Get an image file rule builder instance.
*
* @param bool $allowSvg
* @return IlluminateValidationRulesImageFile
*/
public static function imageFile($allowSvg = false)
{
return new ImageFile($allowSvg);
}
/**
* Get a dimensions rule builder instance.
*
* @param array $constraints
* @return IlluminateValidationRulesDimensions
*/
public static function dimensions(array $constraints = [])
{
return new Dimensions($constraints);
}
/**
* Get a string rule builder instance.
*
* @return IlluminateValidationRulesStringRule
*/
public static function string()
{
return new StringRule;
}
/**
* Get a numeric rule builder instance.
*
* @return IlluminateValidationRulesNumeric
*/
public static function numeric()
{
return new Numeric;
}
/**
* Get an "any of" rule builder instance.
*
* @param array $rules
* @return IlluminateValidationRulesAnyOf
*
* @throws InvalidArgumentException
*/
public static function anyOf($rules)
{
return new AnyOf($rules);
}
/**
* Get a contains rule builder instance.
*
* @param IlluminateContractsSupportArrayable|UnitEnum|array|string $values
* @return IlluminateValidationRulesContains
*/
public static function contains($values)
{
if ($values instanceof Arrayable) {
$values = $values->toArray();
}
return new RulesContains(is_array($values) ? $values : func_get_args());
}
/**
* Get a "does not contain" rule builder instance.
*
* @param IlluminateContractsSupportArrayable|UnitEnum|array|string $values
* @return IlluminateValidationRulesDoesntContain
*/
public static function doesntContain($values)
{
if ($values instanceof Arrayable) {
$values = $values->toArray();
}
return new RulesDoesntContain(is_array($values) ? $values : func_get_args());
}
/**
* Compile a set of rules for an attribute.
*
* @param string $attribute
* @param array $rules
* @param array|null $data
* @return object|stdClass
*/
public static function compile($attribute, $rules, $data = null)
{
$parser = new ValidationRuleParser(
Arr::undot(Arr::wrap($data))
);
if (is_array($rules) && ! array_is_list($rules)) {
$nested = [];
foreach ($rules as $key => $rule) {
$nested[$attribute.'.'.$key] = $rule;
}
$rules = $nested;
} else {
$rules = [$attribute => $rules];
}
return $parser->explode(ValidationRuleParser::filterConditionalRules($rules, $data));
}
}