Laravel Traits, як створити та використовувати Traits у проекті PHP Laravel 11

особливості laravel

Un Характеристики Laravel це багаторазовий набір методів, які можна включити в класи Laravel.

Характеристики пропонують спосіб групування та повторного використання коду в кількох класах без обмежень успадкування.

Вони забезпечують зручний спосіб розширення можливостей Laravel, зберігаючи чистий модульний код.

Приблизний час читання: 2 хвилин

Впроваджуючи Traits, ми можемо підвищити ефективність і зручність обслуговування нашої програми, заохочуючи повторне використання коду та розподіл відповідальності в рамках Laravel.

Створіть ознаку

Ларавел 11 додано нову команду Artisan для створення спеціальної риси. Ми побачимо приклад Риса з методами генерації слаків і перевірки їх унікальності. Ми будемо використовувати його в моделі Post. Тож розглянемо простий приклад крок за кроком:

Ви можете використати таку команду, щоб створити новий Риса in Ларавел 11.

php artisan make:trait {traitName}

Міграція та модель

Встановлюючи Laravel Framework версії 11, ми переходимо до створення моделі Post:

php artisan make:model Post -m

Команда, яку ви щойно виконали, створює обидва migration create_posts_table.php що model Post. Давайте продовжимо налаштування міграції наступним чином:

<?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');
    }
};

Давайте запустимо команду міграції

php artisan migrate

а потім переходимо до налаштування 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);
    }
}

Створення класу ознак

Давайте створимо клас Sluggable.php e definiamo i metodi per generare слизняк і перевірте його унікальність.

Давайте запустимо таку команду, щоб створити нову ознаку:

php artisan make:trait Traits/Sluggable

ми відкриваємо файл app/Traits/Sluggable.php і налаштовуємо код таким чином:

<?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();
    }
}

Створення маршруту

Давайте створимо Route для тестування за допомогою такої команди:

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

Створення контролера

<?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());
    }
}

Нарешті, дотримуючись маршруту публікації, ми створимо три публікації, отримуючи наступний вихідний результат:

приклад виведення властивостей laravel
Приклад результату Laravel Traits

Пов'язані читання

Ercole Palmeri

Авторе

Вам може бути цікаво…