LaravelでURLでUUIDを使う方法


このポストは最初に出版されたmy website . 更新のためにそれをチェックしてください.
インマイprevious post , セキュリティやその他の問題により、なぜデフォルトのインクリメントIDを公開してはいけないのかを説明しました.幸いにも、この問題のいくつかの解決策があります:スラグとUUID.
場合は、スラグについての詳細を読む場合は、することができますread more それについて.
このポストでは、私はあなたがどのようにRuavavelでUUIDを構成することができるかを示すつもりです.以下のようなURLを取得します.
http://www.example.org/orders/065e9fb3-6bec-494c-9917-4ab8e71750d4
http://www.example.org/users/d3835dda-e08f-4ed5-baff-756d62a749b2
http://www.example.org/images/avatar-d54a923b-c5d4-4294-8033-a221a57ef361.jpg

移動
まず、Aを加える必要がありますuuid 移行中の列.ララベルはUUID column 利用できる利用可能.
// database/migrations/create_posts_table.php

Schema::create('posts',  function  (Blueprint  $table)  {
    $table->id();
    $table->uuid('uuid')->unique(); // <!-- Add the UUID column in your migration
    $table->string('title');
    $table->text('body');
    $table->timestamps();
});

モデル
次に、モデル(例えばPOST)が作成されるたびに、UUIDを自動的に割り当てます.我々はそれを行うことができますboot モデルのモデル
// app/Models/Post.php

use Illuminate\Support\Str;

protected  static  function  boot()
{
    parent::boot();

    static::creating(function  ($model)  {
        $model->uuid = (string) Str::uuid();
    });
}

工場
あなたがすぐにテストモデルを作成するモデル工場を使用している場合は、それらに何かを追加する必要はありませんboot メソッドは、ファクトリを使用するときに実行されます.

ルーティング
最後のステップはルートファイルを更新することです.あなたが使うたびにRoute Model Binding あなたのroutes/web.php ファイル追加:uuid 最後に
// routes/web.php

Route::get('/posts/{post:uuid}', [PostController::class, 'show'])
    ->name('posts.show');
今ラーラベルは自動的にルーティングのUUID列を使用します.

URL
URLを使用する場合は、あなたのルートをどこに更新する必要があります.例えば、
// resources/views/posts/index.blade.php

<ul>
    @foreach($posts as $post)
        <li>
            <a href="{{ url('/posts/' . $post->uuid) }}">
                {{ $post->title }}
            </a>
        </li>
    @endforeach
</ul>
route ヘルパー
あなたが使っているならばroute ヘルパーメソッドは、何かを変更する必要はありません!例えば、
// resources/views/posts/index.blade.php

<ul>
    @foreach($posts as $post)
        <li>
            <a href="{{ route('posts.show', $post) }}">
                {{ $post->title }}
            </a>
        </li>
    @endforeach
</ul>

結論
あなたが見ることができるように、それは非常に簡単UUIDを使用して、あなたのインクリメントIDを非表示にララベルを使用します.私はあなたがこのポストが好きであることを望みます、そして、あなたがしたならば、あなたは下記の私の会報を購読することができます.