Laravel Traits come creare e usare i Traits in un progetto PHP Laravel 11

laravel traits

Un Traits Laravel è un insieme riutilizzabile di metodi che possono essere inclusi nelle classi Laravel.

I traits offrono un modo per raggruppare e riutilizzare il codice su più classi senza limitazioni di ereditarietà.

Forniscono un metodo conveniente per estendere le capacità di Laravel mantenendo un codice pulito e modulare.

Tempo di lettura stimato: 2 minuti

Incorporando i Traits, possiamo migliorare l’efficienza e la manutenibilità della nostra applicazione, favorendo il riutilizzo del codice e la separazione delle responsabilità all’interno del framework Laravel.

Creare un Trait

Laravel 11 ha aggiunto un nuovo comando Artisan per creare un trait personalizzato. Vedremo un esempio di Trait con metodi per generare slug e verificarne l’unicità. Lo useremo nel modello Post. Vediamo quindi passo dopo passo il semplice esempio:

È possibile utilizzare il seguente comando per creare un nuovo Trait in Laravel 11.

php artisan make:trait {traitName}

Migration e Model

In una installazione del Framework di Laravel versione 11, procediamo con creare il Model Post:

php artisan make:model Post -m

Il comando appena eseguito crea sia la migration create_posts_table.php che il model Post. Procediamo con personalizzare la migration come segue:

<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('slug');
            $table->text('content');
            $table->timestamps();
        });
    }
 
    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Avviamo il comando migrate

php artisan migrate

e successivamente procediamo a personalizzare il model

<?php
  
namespace App\Models;
  
use Illuminate\Database\Eloquent\Model;
use App\Traits\Sluggable;
  
class Post extends Model
{
    use Sluggable;
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    protected $fillable = ['title', 'content', 'slug'];
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function setTitleAttribute($value)
    {
        $this->attributes['title'] = $value;
        $this->attributes['slug'] = $this->generateSlug($value);
    }
}

Creazione Trait Class

Creiamo la classe Sluggable.php e definiamo i metodi per generare slug e verificarne l’unicità.

Eseguiamo il seguente comando per creare un nuovo Trait:

php artisan make:trait Traits/Sluggable

apriamo il file app/Traits/Sluggable.php e personalizziamo il codice come segue:

<?php
  
namespace App\Traits;
  
trait Sluggable
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function generateSlug($string)
    {
        $slug = strtolower(str_replace(' ', '-', $string));
        $count = 1;
  
        while ($this->slugExists($slug)) {
            $slug = strtolower(str_replace(' ', '-', $string)) . '-' . $count;
            $count++;
        }
  
        return $slug;
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    protected function slugExists($slug)
    {
        return static::where('slug', $slug)->exists();
    }
}

Creazione Route

Creiamo una Route per il test, con il comando seguente:

<?php
  
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
    
Route::get('/post', [PostController::class, 'index']);

Creazione Controller

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Models\Post;
  
class PostController extends Controller
{   
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function index(Request $request) {
          
        $post = Post::create([
            "title" => "Example Post",
            "content" => "This is an example post.",
        ]);
  
        $post2 = Post::create([
            "title" => "Example Post",
            "content" => "This is an example post 2.",
        ]);
  
        $post3 = Post::create([
            "title" => "Example Post",
            "content" => "This is an example post 3.",
        ]);
  
        dd($post->toArray(), $post2->toArray(), $post3->toArray());
    }
}

Infine, percorrendo la rotta post, andremo a creare i tre post ottenendo il seguente risultato in output:

laravel traits output example
Laravel Traits output esempio

Letture Correlate

Ercole Palmeri

Autore