Оптимізуйте свої моделі Laravel за допомогою атрибутів Stringable

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 18 березня, 2025
Використання касту AsStringable у Laravel відкриває нові горизонти для роботи зі строковими атрибутами в моделях Eloquent. Досліджуйте, як цей потужний інструмент може зробити ваш код більш чистим і виразним, перетворюючи обробку рядків на елегантний процес з можливістю ланцюгового виклику методів

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