为啥 Laravel 网站在 web.php 中没有走正确的路线?啥是自动加载 static.php?

Posted

技术标签:

【中文标题】为啥 Laravel 网站在 web.php 中没有走正确的路线?啥是自动加载 static.php?【英文标题】:why Laravel web site not go to the right route in web.php? what is autoload_static.php?为什么 Laravel 网站在 web.php 中没有走正确的路线?什么是自动加载 static.php? 【发布时间】:2019-03-13 19:53:48 【问题描述】:

我有 LoginController_old.php 和 LoginController.php

当我进入 127.0.0.1/login

我发现它运行到 LoginContrller_old.php

不遵守 web.php 路线

Auth::routes();

我使用 php artisan route:list 我看路线是对的

Route::get('login', 'App\Http\Controllers\Auth\LoginController@showLoginForm');
Route::post('login', 'App\Http\Controllers\Auth\LoginController@login');
Route::get('logout', 'App\Http\Controllers\Auth\LoginController@logout');

但为什么总是走错路……

我尝试将名称更改为 old_Logincontroller.php 然后显示错误信息...

"include(/var/www/html/comefo/vendor/composer/../../app/Http/Controllers/Auth/LoginController_old.php): failed to open stream: No such file or directory"

我搜索 vendor/composer/autoload_static.php 我发现错误

public static $classMap = array (
    'App\\Console\\Kernel' => __DIR__ . '/../..' . '/app/Console/Kernel.php',
    'App\\Events\\News' => __DIR__ . '/../..' . '/app/Events/News.php',
    'App\\Events\\Queue_number' => __DIR__ . '/../..' . '/app/Events/Queue_number.php',
    'App\\Exceptions\\Handler' => __DIR__ . '/../..' . '/app/Exceptions/Handler.php',
    'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ForgotPasswordController.php',
    'App\\Http\\Controllers\\Auth\\LoginController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/LoginController old.php',

这个问题怎么来的? 为什么要使用 autoload_static.php 来混合路由?以及我如何解决这个问题并且从不使用 autoload_static.php 因为它浪费了我一整天.....

修复1 采用 php工匠路线:缓存 我得到了错误

   LogicException  : Unable to prepare route [api/user] for serialization. Uses Closure.

  at /var/www/html/comefo/vendor/laravel/framework/src/Illuminate/Routing/Route.php:880
    876|      */
    877|     public function prepareForSerialization()
    878|     
    879|         if ($this->action['uses'] instanceof Closure) 
  > 880|             throw new LogicException("Unable to prepare route [$this->uri] for serialization. Uses Closure.");
    881|         
    882| 
    883|         $this->compileRoute();
    884| 

  Exception trace:

  1   Illuminate\Routing\Route::prepareForSerialization()
      /var/www/html/comefo/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php:62

  2   Illuminate\Foundation\Console\RouteCacheCommand::handle()
      /var/www/html/comefo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:29

  Please use the argument -v to see more details.

【问题讨论】:

autoload_static.php 是从您的路由和命名空间自动生成的。您需要运行composer dump-autoload 重新生成autoload_static.php。没有什么需要的 这里 Composer 没有问题,你看错了方向。 app 文件夹中的所有类都必须遵循 PSR-4,以便自动加载按照为 Laravel 设置的方式工作。 LoginController_old.php 不符合 PSR-4。如果您根据文档设置了所有路线,那么我敢打赌您只是被重定向到另一条路线。 【参考方案1】:

根据您选择的环境,Laravel 可能会缓存您的路线。

您可以在 CLI 中尝试以下两个命令

php artisan cache:clear
php artisan route:cache

参考:Laravel Docs Artisan Cache

之后应该重建路由缓存。 如果这对您不起作用,您还可以尝试刷新作曲家缓存。

composer dump-autoload 

参考:Composer Dump Autoload Docs

你也可以看看这篇文章:How to clear Route Caching on server: Laravel 5.2.37

如果您有更多问题,请告诉我。 希望对您有所帮助!

【讨论】:

我尝试“作曲家更新”可以解决问题但是我可以再次避免错误消息吗?或者当我在做什么时需要使用这些命令? @robspin 仅仅抑制错误消息从来都不是好习惯。你试过我提到的所有东西吗? 我使用 artisn route:cache 得到了我在帖子中发布的错误信息。 也许你的 routes.php 中有一个损坏的 url。去检查所有的网址是否有效!

以上是关于为啥 Laravel 网站在 web.php 中没有走正确的路线?啥是自动加载 static.php?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中检查网站地址的访问权限

为啥 nib 文件中的 UITableViewCell(加载并添加到堆栈)在 viewDidAppear 中为零,但在 viewDidLoad 中没问题?

为啥 volatile 在多线程 C 或 C++ 编程中没有用?

Laravel 419 错误-VerifyCsrfToken 问题

Laravel:routes/api.php 或 routes/web.php 中的 AJAX 请求端点?

在 laravel 中动态创建刀片