50 lines
1.5 KiB
PHP
50 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controller\Booking;
|
|
|
|
use App\Form\Model\BookingCreateDto;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
|
|
/**
|
|
* Provides common functionality for booking creation controllers.
|
|
*
|
|
* This trait contains shared validation and redirect logic used across
|
|
* all booking creation steps to ensure consistent behavior and reduce
|
|
* code duplication.
|
|
*/
|
|
trait BookingCreateTrait
|
|
{
|
|
/**
|
|
* Validates step access and returns redirect response if necessary.
|
|
*
|
|
* @return RedirectResponse|null Returns redirect response if validation fails, null if access is allowed
|
|
*/
|
|
private function validateStepAccess(BookingCreateDto $bookingCreateDto, int $expectedStep): ?RedirectResponse
|
|
{
|
|
// Allow access to current step or any previous step
|
|
if ($expectedStep > $bookingCreateDto->currentStep) {
|
|
$this->addFlash('error', 'Bitte erst die vorherigen Schritte abschließen.');
|
|
|
|
return $this->redirectToCurrentStep($bookingCreateDto);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Redirects to the current step based on the DTO's currentStep.
|
|
*/
|
|
private function redirectToCurrentStep(BookingCreateDto $bookingCreateDto): RedirectResponse
|
|
{
|
|
$route = match ($bookingCreateDto->currentStep) {
|
|
2 => 'app_booking_create_step_2',
|
|
3 => 'app_booking_create_step_3',
|
|
default => 'app_booking_create_step_1',
|
|
};
|
|
|
|
return $this->redirectToRoute($route);
|
|
}
|
|
}
|