Кастомні перетворення в Laravel дозволяють виконувати індивідуальні трансформації даних, виходячи за межі стандартних можливостей, для роботи зі складними типами даних та бізнес-логікою.
Ось приклад форматування номера телефону за допомогою кастомних перетворень:
<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class PhoneNumber implements CastsAttributes
{
public function get(Model $model, string $key, mixed $value, array $attributes): string
{
return sprintf(
"+%d (%d) %d-%d",
...explode('|', $value)
);
}
public function set(Model $model, string $key, mixed $value, array $attributes): string
{
$value = preg_replace('/[^0-9]/', '', $value);
return implode('|', [
substr($value, 0, 1),
substr($value, 1, 3),
substr($value, 4, 3),
substr($value, 7)
]);
}
}
І ще один приклад форматування адреси:
<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class Address implements CastsAttributes
{
public function get(Model $model, string $key, mixed $value, array $attributes): array
{
$data = json_decode($value, true);
return [
'street' => $data['street'],
'city' => $data['city'],
'state' => $data['state'],
'postal_code' => $data['postal_code'],
'formatted' => sprintf(
'%s, %s, %s %s',
$data['street'],
$data['city'],
$data['state'],
$data['postal_code']
)
];
}
public function set(Model $model, string $key, mixed $value, array $attributes): string
{
return json_encode([
'street' => $value['street'],
'city' => $value['city'],
'state' => $value['state'],
'postal_code' => $value['postal_code']
]);
}
}
У вашій моделі ви зможете використовувати обидва формати в такій ситуації:
class User extends Model
{
protected $casts = [
'address' => Address::class,
'phone' => PhoneNumber::class
];
}
Кастомні перетворення забезпечують зручний та повторно використовуваний спосіб обробки складних трансформацій даних, залишаючи ваші моделі легкими та зручними для обслуговування.
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!
Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!
Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом