Каст AsStringable у Laravel — це потужний інструмент, який значно покращує роботу зі строковими атрибутами у ваших моделях Eloquent. Перетворюючи строкові атрибути на об'єкти Stringable, ви отримуєте доступ до великої кількості методів для маніпуляцій зі строками, що робить ваш код зрозумілішим і виразнішим. Цей підхід особливо цінний для контентно насичених застосунків, де часта маніпуляція з рядками допомагає підтримувати чистоту контролерів та представлень.
use Illuminate\Database\Eloquent\Casts\AsStringable;
class Post extends Model
{
protected function casts(): array
{
return [
'title' => AsStringable::class,
'content' => AsStringable::class
];
}
}
Ось практичний приклад із системи управління контентом:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\AsStringable;
class Article extends Model
{
protected function casts(): array
{
return [
'title' => AsStringable::class,
'content' => AsStringable::class,
'meta_description' => AsStringable::class
];
}
public function getSnippetAttribute()
{
return $this->content
->stripTags()
->words(30, '...');
}
public function getUrlPathAttribute()
{
return $this->title
->slug()
->prepend('/articles/');
}
public function getFormattedContentAttribute()
{
return $this->content
->markdown()
->replaceMatches('/\@mention\((.*?)\)/', '<a href="/users/$1">@$1</a>')
->replace('[[', '<mark>')
->replace(']]', '</mark>');
}
public function getSeoTitleAttribute()
{
return $this->title
->title()
->limit(60);
}
}
$article = Article::find(1);
// Access Stringable methods directly
dd($article->title->title());
dd($article->content->words(20));
// Use computed attributes
dd($article->snippet);
dd($article->url_path);
dd($article->formatted_content);
Каст AsStringable перетворює обробку рядків на елегантний досвід, що підтримує ланцюговість викликів методів, зберігаючи код чистим та зрозумілим