【问题标题】:Why my Laravel routes work in Laravel 7 but does not work in Laravel 8?为什么我的 Laravel 路由在 Laravel 7 中有效,但在 Laravel 8 中无效?
【发布时间】:2021-08-05 06:44:16
【问题描述】:

这是我在 laravel 7 中运行良好的路线:

Route::get('/verify','Auth\RegisterController@verifyUser')->name('verify.user'); 

但在 Laravel 8 中它不起作用。它显示一个错误:

Illuminate\Contracts\Container\BindingResolutionEx. Target class [Auth\RegisterController] does not exist.

【问题讨论】:

  • 应该是App\Http\Controllers\Auth\RegisterController
  • Laravel 在版本 8 中改变了路由方法。Route::get('/verify', [RegisterController::class, 'verifyUser'])->name('verify.user'); 别忘了加上use Auth\RegisterController 声明。检查this
  • 谢谢,它对我也有用,还添加了 use App\Http\Controllers\Auth\RegisterController;

标签: laravel authentication routes controller email-verification


【解决方案1】:

以下是在 laravel 8 中定义路由的新方法

Route::get('/verify', [Auth\RegisterController::class, 'verifyUser'])->name('verify.user');

【讨论】:

    【解决方案2】:

    在 laravel 8 中,RouteServiceProvider 中应用程序的控制器命名空间默认被注释:

    // protected $namespace = 'App\\Http\\Controllers';
    

    根据文档:

    在之前的 Laravel 版本中,RouteServiceProvider 包含一个 $namespace 属性。此属性的值将自动添加到控制器路由定义和对操作助手/ URL::action 方法的调用上。在 Laravel 8.x 中,该属性默认为 null。这意味着 Laravel 不会自动为命名空间添加前缀。”Laravel 8.x Docs - Routing Namespace Updates

    你可以像这样导入命名空间:

    use App\Http\Controllers\Auth\RegisterController;
    
    // then
    Route::get('/verify','RegisterController@verifyUser')->name('verify.user');
    

    或者您可以使用以下完全限定名称:

    Route::get('/verify', [App\Http\Controllers\Auth\RegisterController::class, 'verifyUser'])->name('verify.user');
    
    // or 
    Route::get('/verify', 'App\Http\Controllers\Auth\RegisterController@verifyUser')->name('verify.user');;
    

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 2018-09-21
      • 2016-01-06
      • 2015-08-12
      • 2015-08-17
      • 1970-01-01
      • 2017-05-13
      • 2016-07-11
      • 1970-01-01
      相关资源
      最近更新 更多