Eloquent перетворення для HTML-рядків у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 02 квітня, 2025
У версії 12.4 Laravel з'явилася нова можливість — автоматичне перетворення атрибутів Eloquent у HTML-рядки за допомогою касту AsHtmlString. Хочете дізнатися, як легко використовувати HTML-рядки з моделей у вашому проєкті? Читайте далі

Починаючи з v12.4, ви можете автоматично перетворювати атрибути Eloquent в HTML-рядок, використовуючи кастинг AsHtmlString. У фреймворку вже є клас HtmlString, і цей кастинг поєднує його з атрибутами Eloquent, які можна використовувати за потреби:

use Illuminate\Database\Eloquent\Casts\AsHtmlString;

protected function casts(): array
{
   return [
      'myAttribute' => AsHtmlString::class,
   ];
}
 
// Використання кастингу автоматично робить це
$model->myAttribute; // \Illuminate\Support\HtmlString

Раніше, щоб отримати аналогічний результат, вам потрібно було або визначити власний кастинг, або створити accessor, або вручну створити екземпляр HtmlString:

protected function html(): Attribute
{
   return Attribute::make(
       get: fn (string $value) => str($value)->toHtmlString(),
   );
}
 
// Використання accessor html()
$model->html; // HtmlString
 
// Або вручну
$myString = new HtmlString($model->myString);
$myString = str($model->myString)->toHtmlString();

Хоча AsHtmlString може бути обмеженим у використанні, він дозволяє використовувати HTML-рядки з вашої моделі під час рендерингу динамічного контенту з бази даних. Проте пам’ятайте, що екземпляри HtmlString не підлягають екрануванню в Blade, наприклад:

{{-- Увага: не підлягає екрануванню при рендерингу в шаблонах Blade! --}}
{{ $model->html }}

Можливо, є й інші специфічні випадки, де HtmlString може бути корисним кастингом — ви самі зрозумієте, коли це потрібно, але будьте обережні.

Перегляньте документацію з кастингу атрибутів для отримання деталей про те, як кастувати атрибути вашої моделі.