laravel5でcontrollerから変数の受け渡し、viewでの展開の際に迷うのでメモ
#1つの変数の送信
変数を一つ受け渡す場合はcompact関数又はwithメソッドで送信。
compactの方が可読性が高いのでそちらを使うことが多い。
compact関数の場合
public function test() {
$test_1 = "テスト";
return view('test.normal',compact('test_1'));
}
withメソッドの場合
public function test() {
$test_1 = "テスト";
return view('test.normal')->with('test_1',$test_1);
}
view側では通常の変数名で展開可能
<p>
送られてきた変数は{{$test_1}}
</p>
#複数の変数の送信
複数の変数の送信も単一と同じくcompact関数またはwithメソッドで送信可能。
withメソッドの場合は配列で送信する。
・compact関数の場合
public function test() {
$test_1 = "テスト1";
$test_2 = "テスト2";
return view('test.normal',compact('test_1','test_2'));
}
・withメソッドの場合
public function test() {
$test_1 = "テスト1";
$test_2 = "テスト2";
return view('test.normal')->with([
"test_1" => $test_1,
"test_2" => $test_2,
]);
}
view側では通常の変数名で展開可能
<p>
送られてきた変数1は{{$test_1}}
送られてきた変数2は{{$test_2}}
</p>
#配列の送信
配列を受け渡す場合も通常の変数と同じ。以下よく使うcompact関数で説明。
public function test() {
$test_array = ["テスト1","テスト2", "テスト3"];
return view('test.normal',compact('test_array'));
}
view側では通常の配列の展開で可能
<p>
送られてきた配列の要素1は{{$test_array[0]}}
送られてきた配列の要素2は{{$test_array[1]}}
送られてきた配列の要素3は{{$test_array[2]}}
</p>
#postデータの送信
postで受け取ったデータをそのまま次のviewに送信する場合。
まずフォーム画面
<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で送られたデータを取得。送信方法は通常の変数と同じ。
public function form_post(Request $request) {
//ポストデータすべての取得
$post_data = $request::all();
return view('test.form_post',compact('post_data'));
}
allメソッドでは連想配列で返されるので、view側では連想配列の展開
<p class="text-center">
テキストボックスは{{$post_data['textbox']}}
ラジオボタンは{{$post_data['radio-btn']}}
</p>
#eloquentで取得したデータベースの値の送信
使用するテーブルの構造
モデルの構造
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;