のぐそんブログ

暗いおじさんがシコシコ書くブログです。

Laravelのcontrollerの使い方メモ

Laravelでcontrollerを利用するためのメモです。

Controllerの定義方法

複数のアクションを設定

こちらが普通のやり方だと思います。 1つのcontrollerの中に複数のアクションを設定します。

routeの設定は以下。

Route::get('hello', 'HelloController@index');

controllerを作る。

php artisan make:controller HelloController

controllerの設定は以下。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index(){
        return view('hello');
    }

    public function create(){
        ...
    }
}

アクションをひとつだけ設定 シングルアクションコントローラーと呼ばれている方法で、controllerに対して1つだけアクションを定義します。

routeの設定は以下。

Route::get('hello', 'HelloController');

controllerを作る。--invokableオプションをつけます。

php artisan make:controller HelloController --invokable

controllerの設定は以下。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        //
        return view('hello');
    }
}

viewに変数の値を渡す

contollerからviewへの値の渡し方です。 クライアントへのレスポンス内容を表示してみます。

変数を渡す場合はcompact関数、with関数などを利用します。

view側は以下のようになります。

<body>
{{$response}}
</body>

compactの場合

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

class HelloController extends Controller
{
    public function index(Request $request,Response $response){
        return view('hello', compact('response'));
    }
}

複数渡す場合は、

    class HelloController extends Controller
    {
        public function index(Request $request,Response $response){
            return view('hello', compact('request','response'));
        }
    }

widthの場合

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

class HelloController extends Controller
{
    public function index(Request $request,Response $response){
        return view('hello')-> with('response',$response);
    }
}

複数渡す場合

   class HelloController extends Controller
    {
        public function index(Request $request,Response $response){
            return view('hello')-> with(['request' => $request,'response' => $response]);
        }
    }