【もう迷わない】プログラミングスクールをポイント別に紹介

Laravelでコントローラーからビューに変数を渡す方法を解説

Laravelでコントローラーからビューに変数を渡すにはどうすればいいんだろう…?

こんな疑問を解決します。

コントローラーに変数を定義してビューに渡し、定義した変数を表示させたい場合は、結論withかcompact関数を使いましょう。

私が普段の実務でよく使っているのはすっきりと書けるcompact関数です。

この記事では、withやcompact関数を使ってどうやってコントローラーからビューに変数を渡すのか解説します。

本記事のゴール
  • Laravelでコントローラーからビューに変数を渡せるようになる
Contents

動作環境

Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1

compactを使ってコントローラーからビューに変数を渡す

compactを使ってコントローラーからビューに渡すには、以下のように書きます。

コントローラー側

    /**
     * 一覧画面
     */
    public function index()
    {
        $name = 'Laravel';
        return view('book.index', compact('name'));
    }

ビュー側

<p>{{ $name }}</p>

compact関数は,compact(‘$なしの変数名’)で定義します。それをビュー側では{{ $変数名 }}で表示させます。

私も疑問に思うのですが、compact($変数名)とかくとエラー起きるので注意しましょう。

compact関数の特徴は、少ない記述で済むことで、コードの可続性が上がることですね。

    /**
     * 一覧画面
     */
    public function index()
    {
        $name = 'Laravel';
        $colors = ['red', 'blue', 'white'];
        $books = Book::all();

        return view('book.index', compact(
            'name',
            'books',
            'colors',
        ));
    }

このように複数の変数を定義してcompact関数でコントローラーからビューに変数を渡せます。

配列や$books = Book::all();のようにLaravelのEloquentを使っている場合は、foreachで取り出せます。

<p>{{ $name }}</p>

@foreach ($books as $book)
  <p>{{ $book }}</p>
@endforeach

@foreach ($colors as $value)
  <p>{{ $value }}</p>
@endforeach

Eloquentの場合は以下のように->カラム名とすることでデータベースの値にアクセスできます。

@foreach ($books as $book)
  <p>{{ $book->book_name }}</p>
@endforeach

compact関数を使ってコントローラーからビューに変数を渡す説明はざっとこんな感じです。

withを使ってコントローラーからビューに変数を渡す

withを使ってもコントローラーからビューに変数を渡せます。

    /**
     * 一覧画面
     */
    public function index()
    {
        return view('book.index')->with('name', 'Laravel');
    }
<p>{{ $name }}</p>

このようにwithの場合は、->with(‘$なしの変数名’, ‘変数の中身’)でコントローラーからビューに渡せます。

変数の中身を定義する場合は以下のように書きます。

    /**
     * 一覧画面
     */
    public function index()
    {
        $foo = 'Laravel';

        return view('book.index')->with('name', $foo);
    }
<p>{{ $name }}</p>

ビュー側では->with(‘第一引数’, ‘第二引数’)の第一引数の変数名を呼ばないとエラーになります。

つまり、->with(‘name’, $foo)であれば、第二引数の

<p>{{ $foo }}</p>

としたらエラーになるので、注意しましょう。

withを用いて複数の変数をビューに渡したい場合は以下のように書きます。

    /**
     * 一覧画面
     */
    public function index()
    {
        $foo = 'Laravel';
        $books = Book::all();

        return view('book.index')->with([
            'name'  => $foo,
            'books' => $books,
        ]);
    }

compact関数同様にwith関数を使ってもコントローラーからビューに変数を渡すことができます。

ただ、私はやはりcopmpact関数の方が記述量が少ないのでcompactを好んで使っています。

【まとめ】Laravelでコントローラーからビューに変数を渡す方法

Laravelでコントローラーからビューに変数を渡す方法を解説しました。

compact関数とwith関数を紹介しましたが、それぞれ適材適所で使っていきましょう!

他にもLaravelの記事を書いているので、参考にしてください。

コメント

コメントする

CAPTCHA


Contents
閉じる