Метод except
Метод except класса Component позволяет исключить указанные поля из массового заполнения. Он возвращает массив всех свойств компонента, кроме перечисленных. Метод особенно полезен при работе с формами, когда нужно защитить определённые поля от массового присвоения.
Синтаксис
<?php
$result = $this->except(['field1', 'field2']);
?>
Метод принимает массив имён полей, которые нужно исключить. Возвращает массив вида ключ-значение со всеми остальными свойствами компонента.
Пример использования
Создадим компонент для формы пользователя, где нужно исключить поле $role из массового заполнения:
<?php
namespace AppLivewire;
use LivewireComponent;
class UserForm extends Component
{
public $name = '';
public $email = '';
public $role = 'user';
public $isActive = true;
public function getDataWithoutRole()
{
$data = $this->except(['role']);
return $data;
}
public function render()
{
return view('livewire.user-form');
}
}
?>
<div>
<form wire:submit.prevent="save">
<input type="text" wire:model="name" placeholder="Name">
<input type="email" wire:model="email" placeholder="Email">
<button type="submit">Save</button>
</form>
<button wire:click="getDataWithoutRole">
Show data without role
</button>
<pre>{{ print_r($this->except(['role']), true) }}</pre>
</div>
Результат выполнения кода при заполненных полях:
[
'name' => 'John Doe',
'email' => 'john@example.com',
'isActive' => true
]
Использование в массовом заполнении
Метод часто применяется в сочетании с fill для безопасного массового заполнения модели:
<?php
namespace AppLivewire;
use LivewireComponent;
use AppModelsUser;
class UserForm extends Component
{
public $user;
public $name = '';
public $email = '';
public $role = 'user';
public $password = '';
public function save()
{
$user = User::find(1);
$safeData = $this->except(['role', 'password']);
$user->fill($safeData);
$user->save();
session()->flash('message', 'User updated successfully');
}
public function render()
{
return view('livewire.user-form');
}
}
?>
Исключение нескольких полей
Метод может исключать любое количество полей:
<?php
namespace AppLivewire;
use LivewireComponent;
class DataManager extends Component
{
public $field1 = 'value1';
public $field2 = 'value2';
public $field3 = 'value3';
public $field4 = 'value4';
public $field5 = 'value5';
public function getSafeData()
{
return $this->except(['field1', 'field3', 'field5']);
}
public function render()
{
return view('livewire.data-manager');
}
}
?>
Результат выполнения:
[
'field2' => 'value2',
'field4' => 'value4'
]