目标 class [App\Http\Controllers\Auth\LoginController] 不存在

Target class [App\Http\Controllers\Auth\LoginController] does not exist

我正在使用 Laravel9,试图将前端和后端分开。我做了很多替换,比如 app\Http 更改为 app\Frontend\Http 或 app\Backend\Http.

之前做过分离,效果不错。现在我无法登录或注销。但是欢迎页面没问题。也许这是因为路由文件 ?

Auth::routes();

routes/web.php

全部内容
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::group( 
    [ 
    'prefix' => LaravelLocalization::setLocale(), 
    'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ], 
    ], function() 
{ 
    Route::get('/', function () {
        return view('welcome');
    });

    Auth::routes();

    Route::get('/home', [App\Frontend\Http\Controllers\HomeController::class, 'index'])->name('home');
});

我也做了:

composer dump-autoload
php artisan clear-compiled
php artisan route:clear
php artisan cache:clear

不工作。

登录控制器

<?php

namespace App\Frontend\Http\Controllers\Auth;

use App\Frontend\Http\Controllers\Controller;
use App\Frontend\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
...

laravel/ui 包的授权路由有点硬编码在 AuthRouteMethods class 中。这是来自 Github 存储库

的方法的 part
$namespace = class_exists($this->prependGroupNamespace('Auth\LoginController')) ? null : 'App\Http\Controllers';
$this->group(['namespace' => $namespace], function() use($options) {
     // Login Routes...
     if ($options['login'] ?? true) {
        $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
        $this->post('login', 'Auth\LoginController@login');
     } 

// more code

它确保 Auth 路由将在 Theme\Http\Controllers 的“默认”命名空间下。但是如果将它包装在像

这样的组中,您可以更改它
Route::group(['namespace' => 'App\Frontend\Http\Controllers'], function () {
  Auth::routes();
});

通过这种方式,您可以将组名称空间添加到它前面,以便程序包可以找到 App\Frontend\Http\Controllers\Auth\LoginController class 等每个其他身份验证控制器

注意 1 - 所有控制器都应在 Auth 命名空间下,并按照包中的定义具体命名,您不能将其更改为 App\Whatever\LoginControllerAuth\Whatever\Auth\MyLoginController - 但您可以使用 App\Whatever\Auth\LoginController

注释 2 - 这不适用于 RouteServiceProvider class 中未注释的 protected $namespace = 'App\Http\Controllers'; 属性,因为它会在命名空间前面加上两次(你会得到类似 App\Http\Controllers\App\Frontend\Http\Controllers\Auth\LoginController 的东西)