Laravel入門編2・コントローラからビューにデータを渡す3つの方法

【Laravel入門2】コントローラからビューへデータを渡す3つの方法を解説

基本的にLaravelではコントローラでPHPの処理を行って、その結果をビューでブラウザに表示します。

そこで今回はコントローラのデータを、ビューに渡す3つの方法を解説します。

  1. view関数の第二引数
  2. compact関数
  3. withメソッド

どの方法を選ぶのか個人の好みですが、私はcompact関数がおすすめです。理由も解説します!

また、複数のデータをコントローラからビューに渡す方法も紹介しますので、ぜひご覧ください。

バージョン9.51.0の「Laravel」で説明します

目次

前回までのソース

前回まで3ファイルを使用しました。

今回もこれらを使って解説します。

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

// 2023.02.18 追記
Route::get('/hello', 'App\Http\Controllers\HelloController@index');

コントローラからビューへデータを渡す3つの方法

コントローラからビューへデータを渡す方法は主に3つあります。

  1. view関数の第二引数
  2. compact関数
  3. withメソッド

順番に解説します。

方法1:view関数の第二引数

まずは基本的な書き方を紹介します。

view関数とは、コントローラで使用した以下の部分です。

return view('hello');

このview関数の、第二引数に受け渡したいデータを追加します。

「第二引数ってどこ?」
view(第一引数 , 第二引数);
このように「,(コンマ)」で区切った2つ目が第二引数です。

以下のようにコントロールを編集してみましょう!

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        // 2023.02.25 追記
        $message = "Laravelの勉強中!!";
        return view('hello', ['message' => $message]);
    }
}

次に、データを受け取る側のビューも編集します。

渡したデータをビューで表示するには、以下のように書きます。

{{ $message }}

PHPでいう「echo」や「print_r」の代わりですね!
少しでもPHPに触れていると最初は混乱しましたが、こればかりは慣れです。

ではビューを編集してみます。

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    {{ $message }}
</body>
</html>

ブラウザの種類は問わないので、「http://localhost/test-laravel/public/hello」にアクセスしてみましょう!

ブラウザに「Laravelの勉強中!!」と表示されれば成功です。

もしページが表示されなかったら、次の項目を確認してみてください。

  • XAMPPのコントロールパネルでApacheを起動したか
  • プロジェクトのフォルダは「C:\xampp\htdocs\test-laravel」になっているか

では、この調子でほかの2つの方法も試してみましょう!

方法2:compact関数【有力!】

compact関数とは、変数名とその値から配列を作成できます。
ビューの変数とコントローラで定義した変数の名前が一致している時に利用できます。

すっきりとした書き方ができるので、こちらを多用している人も多いですね。

「すっきりとした書き方」は、プログラムを書いている時に書きやすく分かりやすいメリットがありますが、修正をほかの作業者がする際にも修正しやすいので、メンテナンス性が高いソースになるというメリットがあります。

では、コントローラを編集しながら書き方を紹介します。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        // 2023.02.25 追記
        $message = "Laravelの勉強中でーす!!";
        return view('hello', compact('message'));
    }
}

view関数の第二変数に書くのは、1つ目の方法と変わりませんね。

しかし、比べてみるとスッキリしているのが分かります。

return view('hello', ['message' => $message]);

変数を一つしか渡さないので「スッキリ?あまり変わらなくない?」と思うかもしれませんが、これが3つ4つと増えると変わってきます。

のちほど複数のデータを渡す解説のときにも見比べていただければと思います。

では、次にビューの編集ですが、渡している変数の名前は変わらないので、方法1のままで大丈夫です。

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    {{$message}}
</body>
</html>

では、「http://localhost/test-laravel/public/hello」にアクセスしてみましょう!

ブラウザに「Laravelの勉強中でーす!!」と表示されれば成功です。

方法3:withメソッド

では最後にwithメソッドを利用する方法を紹介します。

withメソッドはリレーション先のデータを取得する際に利用されます。

方法1と方法2のようにviewの第二引数に書く方法とはまったく異なるので注意してくださいね。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        // 2023.02.25 追記
        $message = "Laravelの勉強中でーす!!";
        return view('hello') -> with('message', $message);
    }
}

ビューの名前で括弧閉じしてますね。その後ろに「->」でwithメソッドを記載します。

では、次にビューの編集です。

こちらも渡している変数の名前は変わらないので、方法1のままで大丈夫です。

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    {{$message}}
</body>
</html>

では、「http://localhost/test-laravel/public/hello」にアクセスしてみましょう!

ブラウザに「Laravelの勉強中です!」と表示されれば成功です。

コントローラからビューへ【複数の】データを渡す方法

コントローラからビューへデータを渡す方法を紹介してきましたが、1つのデータしか送っていませんでした。

プログラムを作ると渡すデータは1つではなく、複数渡すことが多いでしょう。

データを複数渡すときの各書き方の方法も紹介します。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        // 2023.02.25 追記
        $message = "Laravelの勉強中でーす!!";
        return view('hello', ['message' => $message , 'message2' => $message2]);
    }
}

基本的に「,」で区切って送るデータを追加します。
方法3だけは「->」が増えていく書き方ですね。

ブラウザで「http://localhost/test-laravel/public/hello」にアクセスすると以下の画像のように表示されます。

前述で触れましたが、送るデータが複数あると方法2「compact関数」のスッキリ感がわかると思います。

あくまでも個人的に「compact関数」の利用がおすすめです。

今回のファイルのまとめ

今回は3ファイルを使用しました。とりあえずソース内容は個人的おすすめの方法2の内容です。

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

// 2023.02.18 追記
Route::get('/hello', 'App\Http\Controllers\HelloController@index');

さいごに

今回は「Laravel」の入門編2として、コントローラからビューへデータを渡す3つの方法を紹介しました。

方法は以下の3つです!

  1. view関数の第二引数
  2. compact関数
  3. withメソッド

これでコントローラからビューへデータを渡す方法が理解できましたね!

少しずつできることが広がってきてますので、そこに楽しさを感じてもらえれば嬉しいです。

今までは「MVC」のうち「V」と「C」であるビューとコントローラの基本的な解説でした。
次から「MVC」のうち「M」のモデルも絡めていきたいと思います!

ぜひ次の記事もよろしくお願いします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次