Laravel Traits 如何在 PHP Laravel 11 專案中建立和使用 Traits

Laravel 特徵

Un Laravel 的特點 是一組可重複使用的方法,可以包含在 Laravel 類別中。

Traits 提供了一種在多個類別之間分組和重複使用程式碼而不受繼承限制的方法。

它們提供了一種方便的方法來擴展 Laravel 的功能,同時保持乾淨、模組化的程式碼。

預計閱讀時間: 2 minuti

透過合併 Traits,我們可以提高應用程式的效率和可維護性,鼓勵 Laravel 框架內的程式碼重複使用和職責分離。

創造一個特質

拉拉維爾 11 新增了一個新的 Artisan 命令來建立自訂特徵。我們將看到一個例子 特徵 使用生成段並驗證其唯一性的方法。我們將在 Post 模型中使用它。那麼讓我們一步步來看這個簡單的例子:

您可以使用以下命令來建立一個新的 特徵 in 拉拉維爾 11.

php artisan make:trait {traitName}

遷移和模型

在 Laravel Framework 版本 11 的安裝中,我們繼續創建 Model 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 我們定義了產生的方法 商家一決高下 並驗證其唯一性。

讓我們運行以下命令來創建一個新的 Trait:

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

路線創建

讓我們使用以下命令建立一個用於測試的路由:

<?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

作者