РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
211 of 274 menu

Правило file

Правило file в Livewire применяется в методе rules для проверки загруженных через wire:model файлов. Оно гарантирует, что переданное значение - это экземпляр TemporaryUploadedFile, и файл был успешно загружен. В отличие от стандартного правила Laravel, Livewire версия учитывает особенности временных загрузок.

Синтаксис

use Livewire\Attributes\Rule; #[Rule('file|max:1024|mimes:jpg,png')] public $photo;

Или в методе rules:

public function rules() { return [ 'photo' => 'file|max:1024|mimes:jpg,png', ]; }

Пример

Давайте создадим компонент для загрузки аватара с проверкой на тип изображения и максимальный размер:

<?php namespace App\Livewire; use Livewire\Component; use Livewire\WithFileUploads; use Livewire\Attributes\Rule; class AvatarUpload extends Component { use WithFileUploads; #[Rule('file|max:2048|mimes:jpg,jpeg,png')] public $avatar; public function save() { $this->validate(); $path = $this->avatar->store('avatars', 'public'); session()->flash('message', 'Avatar uploaded: ' . $path); } public function render() { return view('livewire.avatar-upload'); } } ?>
<form wire:submit.prevent="save"> <input type="file" wire:model="avatar"> @error('avatar') <span>{{ $message }}</span> @enderror <button type="submit">Upload</button> </form> @if (session()->has('message')) <div>{{ session('message') }}</div> @endif

Результат выполнения кода при успешной загрузке:

<form> <input type="file"> <button type="submit">Upload</button> </form> <div>Avatar uploaded: avatars/abc123.jpg</div>

Результат выполнения кода при ошибке валидации:

<form> <input type="file"> <span>The avatar must be a file of type: jpg, jpeg, png.</span> <button type="submit">Upload</button> </form>

Пример

Давайте разрешим загрузку только PDF-файлов размером не более 5 МБ с проверкой в методе rules:

<?php namespace App\Livewire; use Livewire\Component; use Livewire\WithFileUploads; class FileUpload extends Component { use WithFileUploads; public $document; public function rules() { return [ 'document' => 'file|max:5120|mimes:pdf', ]; } public function upload() { $validated = $this->validate(); $path = $validated['document']->store('documents', 'public'); $this->dispatch('uploaded', path: $path); } public function render() { return view('livewire.file-upload'); } } ?>
<div> <input type="file" wire:model="document"> @error('document') <span>{{ $message }}</span> @enderror <button wire:click="upload">Upload PDF</button> </div>

Результат выполнения кода:

<div> <input type="file"> <button wire:click="upload">Upload PDF</button> </div>

Смотрите также

  • трейт WithFileUploads,
    который добавляет поддержку загрузки файлов
  • метод store,
    который сохраняет загруженный файл
  • правило image,
    которое проверяет, что файл является изображением
  • правило max,
    которое ограничивает размер загружаемого файла
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить