Laravel8でtitleタグを簡単に動的にする(ページごとに変える)方法

Laravel8でtitleタグを簡単に動的にする(ページごとに変える)方法

458 回閲覧されました

みなさんこんにちは、jonioです。

Laravelでheadタグの中にtitleタグを入れますが動的にしたい(ページごとに変えたい)はずです。

簡単にできる方法を2通り解説します。

Laravelのバージョン

今回試したバージョンは8ですが他のバージョンでもできる気がします。

変数を直接指定する方法

大体の人が共通のページを使うはずなので共通のレイアウトを作成します。(共通レイアウトはなくてもいいです)

「Laravelのプロジェクト > resources > components」の下の階層に「layout.blade.php」を作成して中身に下記の記述をします。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ $title }}</title>
</head>
<body>
    共通レイアウトです。
</body>
</html>

7行目の「$title」をページごとに変えます。

そしてどのページでもいいですがindex.blade.phpで試します。

コントローラーのアクションに下記の記述をします。

public function index(){
  $title = "権限一覧";
        
  return view('index', compact('title'));
}

そしてindex.blade.phpを作成して中身に下記の記述をします。

<x-layout/>

これでindex.blade.phpで表示するページを開いてタブを見るとtitleタイトルタグの内容が反映されるのが確認できます。

表示するページごとにコントローラーの$titleの値を変えればページごとのtitleタグの内容を変えることができます。

view()->shareを使う

$titleをコントローラーごとに変えるのではなく「view()->share」を使います。

使い方は下記になります。

view()->share('変数名', '変数の内容');

「変数名」を「title」にして「変数の内容」を「権限一覧」にすれば「$title = 権限一覧」と同じになります。

コントローラーに実際に記述すると下記になります。

public function index(){
  view()->share('title', '権限一覧');
        
  return view('roletype.index');
}

この場合はcompact関数を使ってビューに$titleの値を渡す必要はありません。