PHP
laravel5
lararavle

[laravel] controllerからviewへの変数の受け渡しとその展開方法

More than 1 year has passed since last update.

laravel5でcontrollerから変数の受け渡し、viewでの展開の際に迷うのでメモ


1つの変数の送信

変数を一つ受け渡す場合はcompact関数又はwithメソッドで送信。

compactの方が可読性が高いのでそちらを使うことが多い。

compact関数の場合


testController.php


public function test() {

$test_1 = "テスト";

return view('test.normal',compact('test_1'));
}


withメソッドの場合


testController.php


public function test() {

$test_1 = "テスト";

return view('test.normal')->with('test_1',$test_1);
}


view側では通常の変数名で展開可能

<p>

送られてきた変数は{{$test_1}}
</p>


複数の変数の送信

複数の変数の送信も単一と同じくcompact関数またはwithメソッドで送信可能。

withメソッドの場合は配列で送信する。

・compact関数の場合


testController.php


public function test() {

$test_1 = "テスト1";
$test_2 = "テスト2";

return view('test.normal',compact('test_1','test_2'));
}


・withメソッドの場合


testController.php


public function test() {

$test_1 = "テスト1";
$test_2 = "テスト2";

return view('test.normal')->with([
"test_1" => "テスト1",
"test_2" => "テスト2",
]);
}


view側では通常の変数名で展開可能


normal.blade.php

<p>

送られてきた変数1は{{$test_1}}
送られてきた変数2は{{$test_2}}
</p>


配列の送信

配列を受け渡す場合も通常の変数と同じ。以下よく使うcompact関数で説明。


testController.php


public function test() {

$test_array = ["テスト1","テスト2", "テスト3"];

return view('test.normal',compact('test_array'));
}


view側では通常の配列の展開で可能


normal.blade.php

<p>

送られてきた配列の要素1は{{$test_array[0]}}
送られてきた配列の要素2は{{$test_array[1]}}
送られてきた配列の要素3は{{$test_array[2]}}
</p>


postデータの送信

postで受け取ったデータをそのまま次のviewに送信する場合。

まずフォーム画面


form.blade.php

<form action="form_post" method="post" accept-charset="utf-8">

<!-- トークンの追加 -->
{!! csrf_field() !!}
<!-- テキストボックス -->
<input type="text" name="textbox" value="">
<!-- ラジオボタン -->
<label>
<input type="radio" name="radio-btn" value="選択1"> 選択1
</label>
<label>
<input type="radio" name="radio-btn" value="選択2"> 選択2
</label>
<input type="submit" value="送信" >
</form>

postを受け取るcontroller

Requestクラスのallメソッドを使用しpostで送られたデータを取得。送信方法は通常の変数と同じ。


testController.php


public function form_post(Request $request) {

//ポストデータすべての取得
$post_data = $request::all();

return view('test.form_post',compact('post_data'));
}


allメソッドでは連想配列で返されるので、view側では連想配列の展開


form_post.blade.php

<p class="text-center">

テキストボックスは
{{$post_data['textbox']}}
ラジオボタンは
{{$post_data['radio-btn']}}
</p>


eloquentで取得したデータベースの値の送信

使用するテーブルの構造

スクリーンショット 2016-08-12 11.02.14.png

内容

スクリーンショット 2016-08-12 14.51.15.png

モデルの構造


class dbtest extends Model
{
protected $table = 'dbtest_table';
}

controllerの記載

変数の受け渡しは通常と同じ。


public function db_test() {

//dbtest_tableの全データを取得
$db_data = App\dbtest::all();

return view('test.db',compact('db_data'));
}

viewではforeachを利用し各レコードを抽出し、さらに抽出したレコードに対しアロー演算子でプロパティを指定することで各カラムのデータを取り出す。

<table>

<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
</tr>
@foreach($db_data as $recode)
<tr>
<th>{{$recode->id}}</th>
<th>{{$recode->name}}</th>
<th>{{$recode->old}}</th>
</tr>
@endforeach
</table>

その他foreachを使わない場合は配列の行番号+プラスアロー演算子で表示もできる。

<p>

{{$db_data[0]->name}}
</p>

なぜ$recodeでアロー演算子でプロパティの呼び出しを行うかというと、

eloquentで取得するデータはcollectionインスタンスとして返されるためである。

collectionインスタンスを利用するとレコードの数を数えたり

$count = $db_data->count();

//$count == 3;

カラムの平均値を出したりすることが出来る

$avg = $db_data->avg('old');

//$avg == 29.333;