Laravel Traits, як створити та використовувати Traits у проекті PHP Laravel 11
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());
}
}
Нарешті, дотримуючись маршруту публікації, ми створимо три публікації, отримуючи наступний вихідний результат:
Пов'язані читання
Ercole Palmeri