wire:confirm показує діалог підтвердження перед виконанням дії. Якщо користувач натиснув «Скасувати» чи Escape, запит на сервер не надсилається.
<button
type="button"
wire:click="delete({{ $post->id }})"
wire:confirm="Видалити цей пост? Дію не можна скасувати."
>
Видалити
</button>
Працює з будь-якою дією: wire:click, wire:submit тощо.
Підтвердження введенням тексту - для особливо руйнівних дій (видалення облікового запису чи проєкту). Модифікатор .prompt, очікуваний текст - після |:
<button
wire:click="deleteAccount"
wire:confirm.prompt="Щоб підтвердити, введіть ВИДАЛИТИ|ВИДАЛИТИ"
>
Видалити обліковий запис
</button>
Дія виконається лише якщо введено точно ВИДАЛИТИ (з урахуванням регістру).
Що варто знати:
- це стандартні діалоги браузера (
confirm()/prompt()): виглядають по-різному в різних браузерах і не стилізуються. Для фірмового вигляду роблять власне модальне вікно (Alpine чи готові компоненти на кшталт Flux), а дію викликають з кнопки всередині нього; - підтвердження - це UX, а не захист. Метод
delete()можна викликати напряму з консолі браузера ($wire.delete(5)), минаючи діалог. Перевірка прав і власності запису обов'язкова в самому методі:
public function delete(Post $post): void
{
$this->authorize('delete', $post);
$post->delete();
}
- для масових чи незворотних операцій варто подумати про «м'яке» видалення (
SoftDeletes) і можливість відновити - це надійніше за будь-які діалоги; - текст діалогу - звичайний рядок, тож його варто перекладати так само, як решту інтерфейсу (
wire:confirm="{{ __('...') }}").