gurelog

エンジニアになるため、日々学んだことをまとめています

【Laravel】コントローラーからビューに変数を渡す

こんにちは。gureです。

今回はLaravelでコントローラーからビューに変数を渡す方法についてまとめました。

 

どうやら3種類方法があるみたいです。

 

 

①[]とダブルアロー関数を使って渡す

ItemsController.php

public function index()
{
 $items = Item::latest()->get();
 return view('index', ['items' => $items]);
}

第一引数ではindexのビュー渡してねと指示を、

第二引数ではitemsは$itemsだからよろしくね、と渡しています。

 

②with関数を使って渡す

ItemsController.php

public function index(){
$items = Item::latest()->get();
return view('index')->with('items', $items);
}

 viewはindex、withではitemsは$itemだからよろしくね、と渡しています。①と似ていますね。

 

今回は変数が一つなのでよいですが、複数になると、

return view('index')->with('items', $items)->with('items2', $items2)->with('items3', $items3);

 と長ったらしくなるので、ちょっと使いづらいですね。

 

③compact関数を使って渡す

ItemsController.php

public function index()
{
 $items = Item::latest()->get();
 return view('index', compact('items'));
}

 その名の通りコンパクトですね。

第一引数ではindexのビュー渡してねと指示を、

第二引数ではitemsは変数でよろしく、と渡しています。

①と②をみているとよくそれで渡せるな、、?という気持ちになりますね。

 

個人的にわかりやすいのは①の方法ですが、同じ単語を何度も書く方法は手間的にもイマイチだな〜と思うので使っていきたいのは③です。

 

 

ちなみに、いずれもビューにはこんな形で変数を渡しました。

index.blade.php

@extends('layout')
@section('content')
@foreach ($items as $item)
 <p>{{ $item->bland }}</p>
 <img src="../../uploads/{{ $item->image }}" class="card-img-top">
 <h5>{{ $item->name }}</h5>
 <p>¥{{ $item->price }}</p>
@endforeach
@endsection

 @foreach ($items as $item)など視覚的に何がしたいのかわかりやすいのがいいですね。

 

だんだんPHPにも慣れてきて楽しくなってきました^ - ^

 

おしまい。 

 

参考資料

https://qiita.com/pipiox/items/af3e2c765677d5db8b4c

https://www.php.net/manual/ja/function.compact.php

https://toriyaru.com/2019/10/25/laravel%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%8B%E3%82%89%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AB%E8%A4%87%E6%95%B0%E3%81%AE%E5%A4%89%E6%95%B0%E3%82%92%E6%B8%A1%E3%81%99/