Каст AsStringable у Laravel перетворює атрибути моделі на об'єкти Stringable, що забезпечує зручний доступ до потужних методів маніпуляції рядками безпосередньо з атрибутів вашої моделі.
Під час роботи з текстом у ваших моделях Laravel часто виникає потреба виконувати різні операції з рядками, такі як форматування, очищення чи трансформація. Хоча ви можете робити це вручну кожного разу, каст AsStringable дозволяє вам працювати з рядковими атрибутами моделі як з об'єктами Stringable, надаючи доступ до безлічі вбудованих методів маніпуляції рядками.
Цей каст є особливо корисним, коли регулярно потрібно виконувати операції з певними атрибутами моделі. Замість того, щоб постійно повторювати один і той же код для маніпуляцій з рядками, ви можете безпосередньо використовувати ці операції на атрибутах моделі так, ніби вони є об'єктами Stringable.
use Illuminate\Database\Eloquent\Casts\AsStringable;
class Post extends Model
{
protected $casts = [
'title' => AsStringable::class,
'content' => AsStringable::class,
];
}
Розглянемо практичний приклад системи блогу з оптимізованим SEO обробленням контенту:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\AsStringable;
class Article extends Model
{
protected $casts = [
'title' => AsStringable::class,
'content' => AsStringable::class,
'meta_description' => AsStringable::class
];
public function getSlugAttribute()
{
return $this->title
->lower()
->replaceMatches('/[^a-z0-9\s]/', '')
->replace(' ', '-')
->limit(60, '');
}
public function getSeoTitleAttribute()
{
return $this->title
->title()
->limit(60, '...')
->append(' | My Blog');
}
public function getExcerptAttribute()
{
return $this->content
->stripTags()
->words(50, '...')
->title();
}
public function getReadingTimeAttribute()
{
return $this->content
->stripTags()
->wordCount() / 200;
}
}
Каст AsStringable спрощує маніпуляцію рядками, надаючи зручний інтерфейс для звичних текстових операцій, завдяки чому ваш код стає більш читабельним і легко підтримуваним.