Как реализовать чтобы модальное окно в Orchid Laravel не закрывалось при ошибках валидации и ошибки выводились в модальном окне?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: модальное окно закрывается и ошибки выводятся уже на самом экране.
Каким способом сделать чтобы модальное окно в Orchid Laravel не закрывалось при ошибках валидации и ошибки выводились в модальном окне?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Елена Вебер Ответ

В Orchid Laravel модальное окно закрывается при ошибке валидации обычно потому, что действие выполняется как обычный submit/redirect, а не как async modal action с возвратом ошибок внутрь формы. Нужно сделать так, чтобы метод выбрасывал ValidationException, а Orchid получил ошибки и перерисовал модалку, не закрывая её как успешную.

В screen-коде validation лучше делать через request validate:

use IlluminateHttpRequest;
 
public function save(Request $request)
{
    $data = $request->validate([
        'name' => ['required', 'string', 'max:255'],
    ]);
 
    // сохранить данные
}

use IlluminateHttpRequest; public function save(Request $request) { $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], ]); // сохранить данные }

Если используется ModalToggle, убедитесь, что кнопка вызывает method, а поля внутри layout имеют правильные имена. Например:

ModalToggle::make('Сохранить')
    ->modal('editModal')
    ->method('save')
    ->asyncParameters([
        'id' => $this->id,
    ]);

ModalToggle::make('Сохранить') ->modal('editModal') ->method('save') ->asyncParameters([ 'id' => $this->id, ]);

Для модального layout:

Layout::modal('editModal', [
    Layout::rows([
        Input::make('name')
            ->title('Название')
            ->required(),
    ]),
])->title('Редактирование');

Layout::modal('editModal', [ Layout::rows([ Input::make('name') ->title('Название') ->required(), ]), ])->title('Редактирование');

Если вы вручную ловите ошибки и возвращаете redirect, модалка может закрыться. Не нужно делать return back() при ошибках. Пусть Laravel/Orchid обработает ValidationException.

Также проверьте версию Orchid: поведение async modal и validation могло отличаться. Если модалка не async, страница будет перезагружаться, и тогда нужно хранить флаг открытия модального окна в сессии, но это менее удобный вариант.

Итог: используйте штатную валидацию Laravel внутри метода Orchid, не перехватывайте её редиректом, проверьте ModalToggle/method и имена полей. При корректной async-настройке ошибки должны показаться в модальном окне, а не на основной странице.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно