关于 Laravel 8 中路由控制器命名空间的变更(附带还原方法)

Laravel

随着 Laravel 8 的发布,路由语法发生了变化,这也许会让您大吃一惊,至少对我而言是如此。 它并没有在升级指南的影响变化中体现,所以为阅读到了最后,又回到了我的困扰。

在新的laravel 8 安装中,我的 web.php 文件中包含以下文件:

Route::get('/', 'HomeController@index');

这是在 HomeController.php 的 index 方法:

    /**
     * 显示资源列表
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('welcome');
    }

这应该是非常熟悉的,并且当我们访问 / 路由时我们希望能看到一个视图。然而我们看到的是一个错误页面。

Laravel

你可能会以为自己写错了代码,但没有。在 laravel 8 中,该语法在默认情况下不起作用。 在 升级指南 中提到过,但是影响的可能性是可选的 🤨。 尽管提到了这一点:

在大多数情况下,这不会影响升级的项目,因为 RouteServiceProvider 仍将包含 $namespace 属性及其先前的值。但是,如果通过创建全新的 Laravel 项目升级项目,则可能会遇到重大变化。

在laravel 8中定义路由的方法是:

use App\Http\Controllers\HomeController;

// 使用 PHP 可调用的语法
Route::get('/', [HomeController::class, 'index']);

或者

// 使用字符串语法...
Route::get('/', 'App\Http\Controllers\HomeController@index');

资源路由变为

Route::resource('/', HomeController::class);

这意味着在laravel 8 中,默认情况下没有自动控制器声明前缀。

如果要坚持旧方法,则需要在 RouteServiceProvider.php 中添加一个命名空间属性(该属性在以前的版本中存在)并在 route 方法中激活。

    /**
     * 该命名空间将应用于你的控制器路由
     *
     * 另外,它被设置为 URL 生成器的根命名空间
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    // 编辑 boot 方法
    /**
     * 定义您的路由模型绑定,模式过滤器等
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

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

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

回顾一下,在laravel 8 中,你可以使用新的语法来定义你的路由或坚持使用旧的方式。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://dev.to/mr_steelze/laravel-8-rout...

译文地址:https://learnku.com/laravel/t/49996

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

虽然老得看起来更加习惯一些,但是用新的其实更加顺手。最头疼的估计就是存量项目

3年前 评论
codeSeele 3年前

大佬,你下面是写重复了吗

3年前 评论
codeSeele 3年前

在api中不起效果

2年前 评论

laravel9下命名空间完全用不了了吗?修改了默认路由加载前缀也不行了。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!