Створення потужної валідації дат за допомогою правила Date у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 01 квітня, 2025
Вас цікавить, як спростити валідацію дат у ваших Laravel-додатках? У цій статті ми розглянемо нове потужне правило Date, яке дозволяє легко реалізувати складні вимоги до валідації в зрозумілому та легкому для підтримки форматі коду

Laravel впроваджує гнучке правило Date, яке змінює підхід до валідації дат у ваших додатках. Цей ланцюговий інтерфейс спрощує складні вимоги до перевірки дат, перетворюючи їх на зрозумілий та легкочитабельний код.

Основна реалізація демонструє гнучкість правила:

use Illuminate\Validation\Rules\Date;
 
public function rules()
{
    return [
        'start_date' => [
            'required',
            new Date  // Основна валідація дати
        ],
        'end_date' => [
            'required',
            (new Date)
                ->after('start_date')
                ->before('2025-01-01')
        ],
        'birth_date' => [
            'required',
            (new Date)
                ->format('d/m/Y')
                ->beforeToday()
        ]
    ];
}

Ось як це правило спрощує валідацію в системі бронювання:

class ReservationController extends Controller
{
    public function store(Request $request)
    {
        $validated = $request->validate([
            'check_in' => [
                'required',
                (new Date)
                    ->format('Y-m-d')
                    ->afterOrEqual('today')
                    ->before(now()->addMonths(6))
            ],
            'check_out' => [
                'required',
                (new Date)
                    ->format('Y-m-d')
                    ->after('check_in')
            ],
            'special_request_by' => [
                'nullable',
                (new Date)
                    ->format('Y-m-d')
                    ->between('today', 'check_in')
            ],
            'guest_birthday' => [
                'nullable',
                (new Date)
                    ->format('m/d/Y')
                    ->beforeOrEqual('today')
                    ->after(now()->subYears(120))
            ]
        ]);
 
        Reservation::create($validated);
 
        return redirect()->route('reservations.confirmation');
    }
}

Ланцюгові методи правила Date створюють виразний синтаксис, завдяки якому навіть складні вимоги до валідації дат стають простими для розуміння та обслуговування