Laravel 5.4 模块:RouteCollection.php 第 161 行中的 NotFoundHttpException

Posted

技术标签:

【中文标题】Laravel 5.4 模块:RouteCollection.php 第 161 行中的 NotFoundHttpException【英文标题】:Laravel 5.4 Modules: NotFoundHttpException in RouteCollection.php line 161 【发布时间】:2017-11-12 11:22:20 【问题描述】:

是的,这是另一个 Laravel route not found 问题!这实际上是一件很奇怪的事情。我知道这里有多个问题至少有相同的错误消息,但似乎没有一个与我的相同。

我正在使用 Laravel 的 nWidart/laravel-modules (https://github.com/nWidart/laravel-modules) 包来创建基于模块的设置。我从通过 Composer 全新安装 Laravel 5.4 开始,然后通过 php artisan make:auth 生成基本用户身份验证。基本设置后,我的app/Http/routes.php 文件如下所示:

// home page
Route::get('/', function () 
    return view('welcome');
);

// login, logout, register, etc.
Route::auth();

// admin dashboard
Route::get('/admin', 'AdminController@index');

然后我通过 Composer 安装了模块包并运行 php artisan module:make Finances Jobs Etsy 以创建三个模块:Finances、Jobs 和 Etsy。这顺利进行。然后,我进入每个单独模块的 Http/routes.php 文件,并为每个路由组添加了 auth 中间件和一个附加前缀:

// Finances routes file
Route::group(['middleware' => ['web', 'auth'], 'prefix' => 'admin/finances', 'namespace' => 'Modules\Finances\Http\Controllers'], function()

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

// Jobs routes file
Route::group(['middleware' => ['web', 'auth'], 'prefix' => 'admin/jobs', 'namespace' => 'Modules\Jobs\Http\Controllers'], function()

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

// Etsy routes file
Route::group(['middleware' => ['web', 'auth'], 'prefix' => 'admin/etsy', 'namespace' => 'Modules\Etsy\Http\Controllers'], function()

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

现在有一个非常令人沮丧的问题:所有基本应用程序路由都可以正常工作。主页路由、身份验证路由和/admin 路由都可以完美运行。此外,所有Jobs 模块路由也可以完美运行。 然而,来自FinancesEtsy 模块的任何和所有路由都工作。尝试访问 https://[site url]/admin/finances 显示以下错误:

NotFoundHttpException in RouteCollection.php line 161:

对我来说,Laravel 无法找到给定的路线,尽管能够找到 Jobs 模块的路线。

Extra 令人困惑的是,Laravel 似乎可以找到路线,因为运行 php artisan route:list 确实向我显示了 Finances 和 Etsy 模块的路线。 p>

我也尝试过多次运行php artisan cache:clearphp artisan route:clear,以防出现某种缓存问题。没有运气。

所以在这一点上,我完全不知道该怎么做。我有三个模块,一个其路由运行良好,另外两个,其配置相同的路由根本无法运行,但 已被route:list 找到。我对目前可能出现的问题一无所知。

更新:有趣的是,如果我将路线放在基础应用程序 routes.php 文件中,如下所示:

Route::group(['middleware' => ['web', 'auth'], 'prefix' => 'admin/finances'], function()

    Route::get('/', '\Modules\Finances\Http\Controllers\FinancesController@index');
);

那么路线确实起作用了。所以这似乎是一个问题,Web 应用程序似乎无法找到这两个模块的 routes.php 文件,但控制台应用程序可以。

【问题讨论】:

试过composer dump-autoload ? 我现在有 - 不幸的是仍然没有运气。 我不确定该模块是否默认启用,但您可以尝试php artisan module:enable Finances Module [Finances] has already enabled. 不幸的是我收到的消息。 根据他们的 github 页面 默认情况下,模块类不会自动加载 那么在您的 composer.json 中,您是否在 psr-4 自动加载下创建了一个条目 "Modules\\": "Modules/" 【参考方案1】:

我有同样的问题,我解决了它添加名称属性:

模块/[ModuleName]/Http/routes.php,

例如:

Route::get('alias','controller@functionName')->name('module.alias');

希望这篇小贴士可以帮到你!

【讨论】:

【参考方案2】:

我有同样的错误,它是这样解决的。 更改文件 modules.php :

'scan' => [
    'enabled' => false,
    'paths' => [
        base_path('vendor/*/*'),
    ],
],

到这里:

'scan' => [
    'enabled' => true,
    'paths' => [
        base_path('modules/*'),
    ],
],

然后运行:

php artisan route:clear
php artisan optimize 

【讨论】:

以上是关于Laravel 5.4 模块:RouteCollection.php 第 161 行中的 NotFoundHttpException的主要内容,如果未能解决你的问题,请参考以下文章

laravel-5.4 - 错误:从空值创建默认对象

laravel 5.4 在邮件中嵌入图像

Laravel 5.4 有时验证规则不起作用

从 5.4 升级后的 Laravel 419 发布请求

如何将我的 laravel 5.0 项目直接升级到 5.4?

反射异常:Laravel 5.4