Починаючи з 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 може бути корисним кастингом — ви самі зрозумієте, коли це потрібно, але будьте обережні.
Перегляньте документацію з кастингу атрибутів для отримання деталей про те, як кастувати атрибути вашої моделі.