Laravelでスラッグ(URLの一意な識別子)を作成する方法


  1. Strクラスを使用する方法: LaravelのStrクラスには、文字列を操作するための便利なメソッドが用意されています。スラッグを作成するためには、Strクラスのslugメソッドを使用します。
use Illuminate\Support\Str;
$slug = Str::slug('Hello World', '-');
echo $slug; // 出力: hello-world

slugメソッドの第2引数には、スラッグの区切り文字を指定することができます。上記の例では、スペースをハイフンに置換しています。

  1. Laravelのルートモデルバインディングを使用する方法: ルートモデルバインディングは、URLの一部にモデルの識別子を直接埋め込むことができる機能です。スラッグを使用してURLを作成する場合、モデルにslug属性を追加し、ルートモデルバインディングを設定します。
// ルート定義
Route::get('articles/{article:slug}', function (App\Models\Article $article) {
    // ルートパラメータとしてスラッグを使用して記事を取得する
    return $article;
});
// Articleモデル
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
    public function getRouteKeyName()
    {
        return 'slug';
    }
}

上記の例では、記事モデルのgetRouteKeyNameメソッドをオーバーライドして、スラッグ属性をルートキーとして使用しています。

これらはLaravelでスラッグを作成するための2つの一般的な方法です。どちらを選ぶかは、プロジェクトの要件や個人の好みによって異なります。