Laravel v12.4 представляє каст AsHtmlString, який кардинально змінює спосіб роботи розробників з HTML-контентом у моделях Eloquent. Ця функція автоматизує перетворення текстових атрибутів у екземпляри HtmlString, позбавляючи від потреби в ручних конвертаціях.
Багатий контент, збережений у базах даних, зазвичай має відображатися без ескейпування HTML. Хоча клас HtmlString уже використовувався в Laravel для цього, його впровадження вимагало написання кастомних аксесорів або ручного перетворення. Каст AsHtmlString спрощує цей процес:
use Illuminate\Database\Eloquent\Casts\AsHtmlString;
use Illuminate\Database\Eloquent\Model;
class Newsletter extends Model
{
protected function casts(): array
{
return [
'content' => AsHtmlString::class,
];
}
}
Тепер, коли каст застосовано, доступ до атрибута content автоматично повертає екземпляр HtmlString:
$newsletter = Newsletter::find(1);
$newsletter->content; // Екземпляр \Illuminate\Support\HtmlString
Раніше розробникам доводилося обробляти HTML-контент за допомогою аксесорів або ручного перетворення:
// Використання аксесуара
protected function content(): Attribute
{
return Attribute::make(
get: fn (string $value) => str($value)->toHtmlString(),
);
}
// Або ручне перетворення за потреби
$htmlContent = new HtmlString($newsletter->content);
$htmlContent = str($newsletter->content)->toHtmlString();
Цей каст спрощує управління контентом у системах і додатках, що працюють з відформатованим текстом. Наприклад, модель продукту в електронній комерції може зберігати HTML-форматовані описи:
class Product extends Model
{
protected function casts(): array
{
return [
'name' => 'string',
'description' => AsHtmlString::class,
'features' => AsHtmlString::class,
'sku' => 'string', // Звичайний рядок, буде ескейплений
];
}
}
З такою конфігурацією шаблони Blade відображають HTML-контент безпосередньо:
<div class="product">
<h2>{{ $product->name }}</h2> <!-- Буде ескейплено -->
<div class="description">
{{ $product->description }} <!-- Не буде ескейплено -->
</div>
<ul class="features">
{{ $product->features }} <!-- Не буде ескейплено -->
</ul>
</div>
Каст AsHtmlString усуває повторення коду, підвищуючи експресивність моделей та типову безпеку у всіх додатках Laravel