ConditionalRules.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace Illuminate\Validation;
  3. use Illuminate\Support\Fluent;
  4. class ConditionalRules
  5. {
  6. /**
  7. * The boolean condition indicating if the rules should be added to the attribute.
  8. *
  9. * @var callable|bool
  10. */
  11. protected $condition;
  12. /**
  13. * The rules to be added to the attribute.
  14. *
  15. * @var \Illuminate\Contracts\Validation\ValidationRule|\Illuminate\Contracts\Validation\InvokableRule|\Illuminate\Contracts\Validation\Rule|\Closure|array|string
  16. */
  17. protected $rules;
  18. /**
  19. * The rules to be added to the attribute if the condition fails.
  20. *
  21. * @var \Illuminate\Contracts\Validation\ValidationRule|\Illuminate\Contracts\Validation\InvokableRule|\Illuminate\Contracts\Validation\Rule|\Closure|array|string
  22. */
  23. protected $defaultRules;
  24. /**
  25. * Create a new conditional rules instance.
  26. *
  27. * @param callable|bool $condition
  28. * @param \Illuminate\Contracts\Validation\ValidationRule|\Illuminate\Contracts\Validation\InvokableRule|\Illuminate\Contracts\Validation\Rule|\Closure|array|string $rules
  29. * @param \Illuminate\Contracts\Validation\ValidationRule|\Illuminate\Contracts\Validation\InvokableRule|\Illuminate\Contracts\Validation\Rule|\Closure|array|string $defaultRules
  30. */
  31. public function __construct($condition, $rules, $defaultRules = [])
  32. {
  33. $this->condition = $condition;
  34. $this->rules = $rules;
  35. $this->defaultRules = $defaultRules;
  36. }
  37. /**
  38. * Determine if the conditional rules should be added.
  39. *
  40. * @param array $data
  41. * @return bool
  42. */
  43. public function passes(array $data = [])
  44. {
  45. return is_callable($this->condition)
  46. ? call_user_func($this->condition, new Fluent($data))
  47. : $this->condition;
  48. }
  49. /**
  50. * Get the rules.
  51. *
  52. * @param array $data
  53. * @return array
  54. */
  55. public function rules(array $data = [])
  56. {
  57. return is_string($this->rules)
  58. ? explode('|', $this->rules)
  59. : value($this->rules, new Fluent($data));
  60. }
  61. /**
  62. * Get the default rules.
  63. *
  64. * @param array $data
  65. * @return array
  66. */
  67. public function defaultRules(array $data = [])
  68. {
  69. return is_string($this->defaultRules)
  70. ? explode('|', $this->defaultRules)
  71. : value($this->defaultRules, new Fluent($data));
  72. }
  73. }