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
模块路由也可以完美运行。 然而,来自Finances
和Etsy
模块的任何和所有路由都不工作。尝试访问 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:clear
和php 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的主要内容,如果未能解决你的问题,请参考以下文章