【Laravel】8.x系のルーティングとコントローラーの使い方

目次

シンプルなコントローラー

1. 作成

手動でファイルを作成することもできるが、Laravelには作成用のコマンドが用意されているので、そのコマンドを使ったほうが、名前空間や最低限必要な記述をしてくれるので便利

以下のコマンドを使用すると、app/Http/Controllers/ディレクトリにxxxController.phpというファイルが生成される

1
php artisan make:controller xxxController

2. アクションメソッドを記述する

1で作成したコードを見ると、以下のようなコードになっているはず。

このコードを見ると、

1
2
3
4
5
6
7
8
<?php

namespace App\Http\Controllers;

class xxxController extends Controller
{
//
}

このコードにルーティングされたときに呼ばれるコードを記述する

今回のケースだと、indexをルーティング先として設定すると、Helloと画面に表示されるメソッドを作成した

1
2
3
4
5
6
7
8
9
10
<?php
namespace App\Http\Controllers;

class xxxController extends Controller
{
public function index()
{
return "Hello";
}
}

3. ルーティングの設定

Routeクラスのgetスタティックメソッドを使用する

  • アクセスURL:/XXXと設定するとhttp://アプリURL/XXXでアクセスできる
  • アクションメソッド名:Controllerクラスに記述したメソッド
    1
    2
    3
    4
    <?php
    use app\Http\Controller名;

    Route::get('アクセスURL',[Controller名::class,'アクションメソッド名']);

2のコードをアクセスURL/helloで設定すると以下のようになる

1
2
3
4
<?php
use app\Http\Controller名;

Route::get('/hello',[xxxController::class,'index']);

シングルアクションコントローラー

1. 作成

シンプルなコントローラー作成コマンドに、--invokableオプションを付けることで、__invokeメソッドを含んだクラスを作成することができる

1
php artisan make:controller xxxController --invokable

2. __invokeメソッドは基本的にアクションメソッドと同じ

シングルアクションの特徴として、アクションコントローラーには複数のアクションメソッドを記述したのに対して、シングルアクションは1つだけのアクションしか記述しません。

1の--invokableオプションで作成すると以下のようなものが自動生成されます。

自動生成された__invokeLaravelが用意したメソッドではなく、PHPに標準でビルドインされているメソッドです。

以下はSingleActionControllerを作成した例です。

1
2
3
4
5
6
7
8
9
10
11
12
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SingleActionController extends Controller
{
public function __invoke()
{
}
}

この__invokeメソッド内にルーティングされたときに呼ばれるコードを記述します。

今回のケースだと、SingleActionControllerをルーティング先として設定すると、helloと画面に表示されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SingleActionController extends Controller
{
public function __invoke()
{
return "hello";
}
}

3. ルーティングの設定

基本的には、基本のコントローラーと同じ記述ですが、今回は、シングルアクションコントローラーなので呼び出すアクションメソッドクラスの記述が必要ありません。

1
2
3
4
<?php
use app\Http\Controller名;

Route::get('アクセスURL',Controller名::class);

2のコードをアクセスURL/singleで設定すると以下のようになる

1
2
3
4
<?php
use app\Http\Controller名;

Route::get('/single',SingleActionController::class);

【Laravel】8.x系のルーティングとコントローラーの使い方

https://blog.djima.net/2021/05/04/【Laravel】8-x系のルーティングとコントローラーの使い方/

Author

Daiki Iijima

Posted on

2021-05-04

Updated on

2024-04-17

Licensed under