Register Auth Routes in Laravel when using ::class for Controllers
Since Freek Van der Herten tweet about the way to register Controllers in Laravel with the ::class (Introduced in PHP 5.5) a while ago I always did it this way. (TL;DR: Go to Solution)
As we mostly create APIs I used this when register Routes in `routes/api.php` only. Till Today…
When I wanted to set this up, I’d remove the namespace prefix from RouteServiceProvider.php and register all Route’s Controller references via ::class notation.
This was my web.php at this point:
use App\Http\Controllers\HomeController; Auth::routes(); Route::get('/home', HomeController::class)->name('home');
But the login (and all other Routes, registered in Auth::routes() didn’t work anymore:
Solution
Auth::routes() uses the string notation internally and does expect the default namespace to be set: https://github.com/laravel/framework/blob/6.x/src/Illuminate/Routing/Router.php#L1149
Because of that, you only need to wrap the call into a Route Group having the namespace set correctly:
use App\Http\Controllers\HomeController; Route::group(['namespace' => 'App\Http\Controllers'], function() { Auth::routes(); }); Route::get('/home', HomeController::class)->name('home');
Leave a Reply