Validácia a HTTP vstup
Vstup z formulára alebo API zvalidujte pravidlom ValidOpeningHours a zvalidované pole odovzdajte priamo do OpeningHours::sync():
use RoundlyConsulting\OpeningHours\Facades\OpeningHours;
use RoundlyConsulting\OpeningHours\Rules\ValidOpeningHours;
use RoundlyConsulting\OpeningHours\Rules\ValidTimeRange;
public function rules(): array
{
return [
'opening_hours' => ['required', 'array', new ValidOpeningHours(requireTimezone: true)],
'range' => [new ValidTimeRange],
];
}
OpeningHours::sync(
$clinic,
$request->validated('opening_hours'),
expectedRevision: $request->filled('revision') ? $request->integer('revision') : null,
);Každý problém sa hlási pod svojím vnoreným kľúčom (opening_hours.schedules.0.week.monday.1) s preloženou správou: neplatné časy, prázdne rozsahy, prekryvy (aj cez polnoc a z nedele do pondelka), dva základné rozvrhy, nejednoznačné sezónne okná či výnimky, neznáme dni, neplatné časové pásma a prekročené limity. new ValidOpeningHours(mergeOverlapping: true) prekryvy zlúči namiesto odmietnutia; requireTimezone: true urobí časové pásmo povinným. ValidTimeRange validuje jeden rozsah.
Validácia v kóde
Fasáda validuje bez zápisu; CalendarData::fromArray() vyhodí InvalidOpeningHoursException so všetkými porušeniami:
use RoundlyConsulting\OpeningHours\DataTransferObjects\CalendarData;
use RoundlyConsulting\OpeningHours\Exceptions\InvalidOpeningHoursException;
use RoundlyConsulting\OpeningHours\Facades\OpeningHours;
$violations = OpeningHours::validate($payload); // ViolationList, nothing is written
$violations->isEmpty();
$violations->first()?->message();
$violations->toMessageBag('opening_hours');
try {
$data = CalendarData::fromArray($payload);
} catch (InvalidOpeningHoursException $e) {
return back()->withErrors($e->violations()->toMessageBag('opening_hours'));
}Kódy porušení
Každé porušenie nesie ViolationCode; jeho správa pochádza z opening-hours::validation.<code> v angličtine a slovenčine: invalid_structure, invalid_time, empty_range, start_at_24, overlap, invalid_date, invalid_month_day, window_inverted, recurrence_mismatch, yearly_window_unbounded, duplicate_base_schedule, ambiguous_schedule_window, duplicate_exception, ambiguous_exception, invalid_timezone, timezone_required, invalid_calendar_key, unknown_weekday, invalid_priority, invalid_capacity, limit_exceeded, label_too_long, meta_too_large, unknown_id, duplicate_id a unsupported_week_array_feature.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.