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

Метод only класса Form

Метод only класса Form используется для извлечения определенных полей из данных формы. Он принимает массив ключей и возвращает массив, содержащий только те значения данных формы, которые соответствуют переданным ключам. Этот метод полезен, когда нужно выбрать конкретные поля из всей формы, например, для сохранения в базу данных или для дальнейшей обработки.

Синтаксис

<?php $form->only(['field1', 'field2']); ?>

Метод принимает один параметр:

  • массив ключей (полей формы), которые нужно извлечь

Пример

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

<?php namespace AppLivewire; use LivewireComponent; use LivewireForm; class RegistrationForm extends Component { public Form $form; public function mount() { $this->form = new Form($this, [ 'name' => '', 'email' => '', 'password' => '', 'password_confirmation' => '', 'agree_terms' => false, ]); } public function save() { $data = $this->form->only(['name', 'email', 'password']); dd($data); } public function render() { return view('livewire.registration-form'); } } ?>
<form wire:submit="save"> <input type="text" wire:model="form.name" placeholder="Name"> <input type="email" wire:model="form.email" placeholder="Email"> <input type="password" wire:model="form.password" placeholder="Password"> <input type="password" wire:model="form.password_confirmation" placeholder="Confirm Password"> <input type="checkbox" wire:model="form.agree_terms"> Agree Terms <button type="submit">Save</button> </form>

После отправки формы метод only извлечет только поля 'name', 'email' и 'password':

[ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'secret123', ]

Поля 'password_confirmation' и 'agree_terms' не будут включены в результат.

Пример

Метод only также может быть полезен при обновлении модели, когда нужно выбрать только определенные поля:

<?php namespace AppLivewire; use AppModelsUser; use LivewireComponent; use LivewireForm; class ProfileForm extends Component { public Form $form; public function mount(User $user) { $this->form = new Form($this, $user->toArray()); } public function update() { $data = $this->form->only(['name', 'email', 'phone']); auth()->user()->update($data); session()->flash('message', 'Profile updated'); } public function render() { return view('livewire.profile-form'); } } ?>
<form wire:submit="update"> <input type="text" wire:model="form.name" placeholder="Name"> <input type="email" wire:model="form.email" placeholder="Email"> <input type="text" wire:model="form.phone" placeholder="Phone"> <input type="text" wire:model="form.address" placeholder="Address"> <button type="submit">Update</button> </form>

При обновлении профиля извлекаются только поля name, email и phone:

[ 'name' => 'John Doe', 'email' => 'john@example.com', 'phone' => '+1234567890', ]

Поле 'address' игнорируется при обновлении модели.

Пример

Метод only можно комбинировать с валидацией для проверки только определенных полей:

<?php namespace AppLivewire; use LivewireComponent; use LivewireForm; class OrderForm extends Component { public Form $form; public function mount() { $this->form = new Form($this, [ 'product_id' => '', 'quantity' => 1, 'delivery_address' => '', 'payment_method' => 'cash', 'comment' => '', ]); } public function placeOrder() { $data = $this->form->only(['product_id', 'quantity', 'delivery_address']); $this->form->validate([ 'product_id' => 'required|exists:products,id', 'quantity' => 'required|integer|min:1', 'delivery_address' => 'required|string|max:255', ]); // Создание заказа } public function render() { return view('livewire.order-form'); } } ?>
<form wire:submit="placeOrder"> <input type="number" wire:model="form.product_id" placeholder="Product ID"> <input type="number" wire:model="form.quantity" placeholder="Quantity"> <textarea wire:model="form.delivery_address" placeholder="Delivery Address"></textarea> <select wire:model="form.payment_method"> <option value="cash">Cash</option> <option value="card">Card</option> </select> <textarea wire:model="form.comment" placeholder="Comment"></textarea> <button type="submit">Place Order</button> </form>

В этом примере метод only выделяет необходимые поля перед валидацией:

[ 'product_id' => '5', 'quantity' => '2', 'delivery_address' => '123 Main Street', ]

Поля 'payment_method' и 'comment' не участвуют в валидации.

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

  • метод except,
    который исключает указанные поля из данных формы
  • метод fill,
    который заполняет поля формы данными
  • метод reset,
    который сбрасывает значения полей формы
  • метод validate,
    который выполняет валидацию данных формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить