Files
kartoteka/app/Rules/DateTimeOrStringOrNumber.php
2025-12-12 17:10:05 +09:00

43 lines
1.1 KiB
PHP

<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Support\Carbon;
class DateTimeOrStringOrNumber implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string, ?string=): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
// Если null - пропускаем
if (is_null($value)) {
return;
}
// Если число
if (is_numeric($value)) {
return;
}
// Если строка
if (is_string($value)) {
// Проверяем, можно ли преобразовать в дату
try {
Carbon::parse($value);
return;
} catch (\Exception $e) {
// Если не дата, но это строка - все равно ок
return;
}
}
$fail('Ошибка при проверки даты');
}
}