Легке маніпулювання рядками за допомогою Cast AsStringable у Laravel

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

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