目标 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\LoginController
或 Auth\Whatever\Auth\MyLoginController
- 但您可以使用 App\Whatever\Auth\LoginController
注释 2 - 这不适用于 RouteServiceProvider
class 中未注释的 protected $namespace = 'App\Http\Controllers';
属性,因为它会在命名空间前面加上两次(你会得到类似 App\Http\Controllers\App\Frontend\Http\Controllers\Auth\LoginController
的东西)
我正在使用 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 存储库
$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\LoginController
或 Auth\Whatever\Auth\MyLoginController
- 但您可以使用 App\Whatever\Auth\LoginController
注释 2 - 这不适用于 RouteServiceProvider
class 中未注释的 protected $namespace = 'App\Http\Controllers';
属性,因为它会在命名空间前面加上两次(你会得到类似 App\Http\Controllers\App\Frontend\Http\Controllers\Auth\LoginController
的东西)