Maison >développement back-end >tutoriel php >Rationalisez vos modèles Laravel avec des attributs chaînables

Rationalisez vos modèles Laravel avec des attributs chaînables

Robert Michael Kim
Robert Michael Kimoriginal
2025-03-05 15:43:23373parcourir

Streamline Your Laravel Models with Stringable Attributes

Le convertisseur de type AsStringable de Laravel est un outil puissant qui améliore considérablement la façon dont vous gérez les propriétés de chaîne dans votre modèle éloquent. En convertissant les propriétés de chaîne en objets Stringable, vous pouvez accéder à un grand nombre de méthodes de manipulation de chaîne pour écrire un nettoyant et un code plus expressif.

Cette méthode est particulièrement utile pour les applications à forte intensité de contenu où les opérations de chaîne sont fréquentes, contribuant à garder le contrôleur et à afficher le rangement.

use Illuminate\Database\Eloquent\Casts\AsStringable;

class Post extends Model
{
    protected function casts(): array
    {
        return [
            'title' => AsStringable::class,
            'content' => AsStringable::class
        ];
    }
}

Voici un exemple pratique d'un système de gestion de contenu:

<?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="https://www.php.cn/link/2fc02e925955d516a04e54a633f05608">@</a>')
            ->replace('[[', '<mark>')
            ->replace(']]', '</mark>');
    }

    public function getSeoTitleAttribute()
    {
        return $this->title
            ->title()
            ->limit(60);
    }
}
$article = Article::find(1);
// 直接访问 Stringable 方法
dd($article->title->title());
dd($article->content->words(20));

// 使用计算属性
dd($article->snippet);
dd($article->url_path);
dd($article->formatted_content);

AsStringable

Le convertisseur de type convertit le traitement des chaînes en une expérience d'appel élégante et enchaînée de méthode tout en gardant le code simplicité et maintenabilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn