在 Laravel 8.0 使用單一動作的控制器

前言

在一些情況下,一個控制器只需要存在一個獨特的動作即可。例如在 Laravel 建立 SPA 應用程式時,會建立一個接受任意路徑的控制器。

做法

新增一個只包含了 __invoke 魔術方法的控制器。

1
php artisan make:controller AppController --invokable

修改 AppController 控制器的 __invoke() 魔術方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class AppController extends Controller
{
/**
* @return \Illuminate\View\View
*/
public function __invoke()
{
return view('app');
}
}

註冊路由。

1
2
3
4
use App\Http\Controllers\AppController;
use Illuminate\Support\Facades\Route;

Route::get('/{any}', AppController::class)->where('any', '.*');

補充

在 Laravel 7 的版本,註冊路由的方法如下:

1
2
3
use App\Http\Controllers\AppController;

Route::get('/{any}', 'AppController')->where('any', '.*');

參考資料