Laravel Tutorials

Laravel's AsHtmlString Cast for Elegant HTML Attribute Management

Published
Laravel's AsHtmlString Cast for Elegant HTML Attribute Management image

Laravel v12.4 brings the AsHtmlString cast, transforming the way developers work with HTML content in Eloquent models. This feature automates the conversion of string attributes to HtmlString instances, eliminating manual conversions.

Rich content stored in databases typically requires display without HTML escaping. The HtmlString class has been part of Laravel for this purpose, but implementing it meant writing custom accessors or performing manual conversions. The AsHtmlString cast streamlines this process:

use Illuminate\Database\Eloquent\Casts\AsHtmlString;
use Illuminate\Database\Eloquent\Model;
 
class Newsletter extends Model
{
protected function casts(): array
{
return [
'content' => AsHtmlString::class,
];
}
}

With the cast applied, accessing the content attribute automatically returns an HtmlString instance:

$newsletter = Newsletter::find(1);
$newsletter->content; // Instance of \Illuminate\Support\HtmlString

Previously, developers needed to handle HTML content using accessors or manual conversions:

// Using an accessor
protected function content(): Attribute
{
return Attribute::make(
get: fn (string $value) => str($value)->toHtmlString(),
);
}
 
// Or manual conversion when needed
$htmlContent = new HtmlString($newsletter->content);
$htmlContent = str($newsletter->content)->toHtmlString();

The cast simplifies content management systems and applications with formatted text. Consider an e-commerce product model storing HTML-formatted descriptions:

class Product extends Model
{
protected function casts(): array
{
return [
'name' => 'string',
'description' => AsHtmlString::class,
'features' => AsHtmlString::class,
'sku' => 'string', // Regular string, will be escaped
];
}
}

With this configuration, Blade templates display HTML content directly:

<div class="product">
<h2>{{ $product->name }}</h2> <!-- Will be escaped -->
<div class="description">
{{ $product->description }} <!-- Will NOT be escaped -->
</div>
<ul class="features">
{{ $product->features }} <!-- Will NOT be escaped -->
</ul>
</div>

The AsHtmlString cast removes repetitive code while enhancing model expressiveness and type safety throughout Laravel applications.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Image Dominant Color and HEIC Support in Laravel 13.24 image

Image Dominant Color and HEIC Support in Laravel 13.24

Read article
Official Laravel Zed Extension: LSP for PHP & Blade image

Official Laravel Zed Extension: LSP for PHP & Blade

Read article
Laravel Head: Manage Meta Tags, Open Graph, and JSON-LD image

Laravel Head: Manage Meta Tags, Open Graph, and JSON-LD

Read article
PhpStorm 2026.2 Released image

PhpStorm 2026.2 Released

Read article
Laravel Doctor: Diagnose Your App With One Artisan Command image

Laravel Doctor: Diagnose Your App With One Artisan Command

Read article
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article