YuHo のブログ

Laravel, PHP, JavaScript

Laravel 5.6 でブログサイトを制作する2 #9 EnterController を作成する

開発

今回はクロージャとして定義してあった enter Route の処理を Controller に移します。
この Route の役割は、ランダムなユーザー・アカウントを1つ選んで、そこにログインすることです。

Controller ファイルを作成する

まずは Controller ファイルを作成します。

php artisan make:controller EnterController

Route ファイルを編集する

次に Route ファイルを編集します。
名称が "enter" である既存の Route のクロージャ部分を直前に作成した EnterController クラスに変更します。
EnterController はただ1つのメソッドを持つコントローラーとする予定なので、クラス名の後にメソッド名を記述する必要はありません。

[blog/routes/web.php]

<?php

Route::get('enter', 'EnterController')->name('enter');

Controller ファイルを記述する

最後に Controller ファイルを編集します。
EnterController はただ1つのメソッドを持つ Controller とします。
そのような場合には __invoke() メソッドを利用します。
Controller の __invoke() メソッドは Route から指定する際に、@??? の部分が必要ありません。
そのため、Route の記述が少しだけ簡潔になります。

[app/Http/Controller/EnterController.php]

<?php

public function __invoke()
{
    $user = App\User::find(1);

    Auth::login($user, true);

    return redirect('/');
}

解説

Controller ファイルを作成する

  1. プロジェクトのフォルダに移動する
  2. php artisan コマンドを実行する
php artisan make:controller MyController

Controller ファイルを編集する(ただ1つのメソッドを持つ Controller を作成する)

  1. 作成した Controller ファイルに __invoke() メソッドを定義する
    1. Route ファイルからそのメソッドを指定する際には @XXX の部分は記述する必要がない。
<?php

public function __invoke($id)
{
    return view('my.template', ['user' => User::findOrFail($id)]);
}