【问题标题】:How to use old Laravel routing style in Laravel 8如何在 Laravel 8 中使用旧的 Laravel 路由风格
【发布时间】:2022-01-25 20:52:16
【问题描述】:

我刚刚安装了 Laravel 8,在这个版本中,我必须像这样输入我的路线:

Route::get('/admin/panel', [App\Http\Controllers\Admin\PanelController::class, 'index']);

但我已经习惯了 Laravel 5 的路线,看起来像这样:

Route::namespace('Admin')->prefix('admin')->group(function () {
    Route::get('/panel', 'Admin/PanelController@index');
});

那么我如何在 Laravel 8 版本中使用这个 Laravel 5 路由呢?

【问题讨论】:

    标签: laravel laravel-5 laravel-8 laravel-routing


    【解决方案1】:

    您仍然可以在某些范围内使用它(例如,对路由进行分组和添加前缀),但是因为您使用的是 FQCN,所以命名空间是多余的。使用“旧”路由的“新”路由的主要优势是重构。当您使用支持重构的 IDE(如 PhpStorm)移动或重命名控制器时,您无需手动更改控制器的名称和组命名空间。

    在 Laravel 5 中,您也可以使用此路由表示法,但文档中并未对其进行概述。

    要获得类似的感觉,请导入命名空间并仅使用您的类名并去掉定义中的命名空间组。

    use App\Http\Controllers\Admin\PanelController;
    
    Route::prefix('admin')->group(function () {
        Route::get('panel', [PanelController::class, 'index']);
    });
    

    如果您无法接受定义路线的新方式,请取消注释 app/Providers/RouteServiceProvider.php 中的 $namespace 属性,然后您将回到旧方式。

    【讨论】:

      【解决方案2】:

      如果您想继续使用“旧”方式定义路由(即Controller@action),则可以这样做,但您需要更改RouteServiceProvider 以包含App\Http\Controllers 命名空间。

      这很简单,对于最新版本的 Laravel 8 来说,这是取消注释以下行的简单案例:

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

      如果您使用的 Laravel 8 版本在 RouteServiceProvider 文件中没有此行,您可以升级您的 Laravel 版本或手动添加它。如果您手动添加该行,您还需要更新boot 方法中的Route 定义以使用$namespace 属性。同样,这非常简单,只需将以下内容添加到 webapi 定义中:

      ->namespace($this->namespace)
      

      例如:

      Route::middleware('web')
          ->namespace($this->namespace)
          ->group(base_path('routes/web.php'));
      

      那你应该可以走了。

      【讨论】:

        猜你喜欢
        • 2013-08-12
        • 2021-08-17
        • 2021-09-01
        • 1970-01-01
        • 2021-04-04
        • 2021-01-30
        • 1970-01-01
        • 2021-11-21
        • 2021-07-11
        相关资源
        最近更新 更多