📘

【Laravel】Controller・View間における変数の受け渡し

2021/04/28に公開

基本事項

・基本的にルーティング(web.phpなど)で変数の宣言や値の計算などをすることはない
・あくまでもルーティングはコントローラーを呼び出すのみ

Controller→View

SampleController
public function sampleFunc()
    {
        $name = "太郎";
        $age = 24;
        $message = "よろしく";

        return view('trouble.test', compact("name", "age", "message"));
    }
sample.blade
<p>このメッセージが見えたらルーティングは正常です。</p>

<br>
<p>{{$name}}</p>
<br>
<p>{{$age}}</p>
<br>
<p>{{$message}}</p>
<br>
web.php
/**
 * サンプル画面
 * 値を渡すテスト
 */
Route::get('/test/sample', [SampleController::class, 'sampleFunc']);

Model → Controller

マイグレーションファイルでテーブルを作成

マイグレーション
class CreateTestsDetailTable extends Migration
{
~中略~
    public function up()
    {
        // テーブル名に合わせるようにする
        Schema::create('tests_detail', function (Blueprint $table) {
            // カラム設定
	    $table->id();
            $table->String('content', 4000);
            $table->timestamps();
        });
    }
~中略~
}

上記で作成したテーブルを操作できるモデルクラスを作成

テストモデル
class TestsDetail extends Model
{
    use HasFactory;

    protected $table = 'test_detail';
}

Controller側で上記のモデルを介してDBから値を持ってくる

TestController.php
public function dbTestSelect()
    {
        //dbtest_tableの全データを取得
        $db_data = \App\Models\TestsDetail::all();

        return view('<View名>', compact('db_data'));
    }
web.php
/**
 * データベーステスト画面
 * データベースから値を抜いて画面に出すテスト
 */
Route::get('<画面側で指定するURL>', [TestController::class, 'dbTestSelect']);

サービスクラスの取り扱いはまた今度

Discussion