【问题标题】:Laravel 7 404 Error with Route with more than 2 LevelsLaravel 7 404 路径超过 2 个级别的错误
【发布时间】:2020-12-10 22:31:30
【问题描述】:

我在使用 Laravel 时遇到了一个有线问题,其中包含多个参数(强制/可选)的路由不起作用。

环境信息

  • 本地:Windows、XAMPP、PHP 7.3
  • 生产:Ubuntu 18.04,PHP 7.4

最初,我怀疑 .htaccess 文件存在问题,但这似乎不是问题。 这在我的本地上完美运行,但由于某种原因,这在 Ubuntu 服务器上不起作用。

以下代码完美运行。

Route::any('route/me/','Tst@routeme');

但是,以下任何一项都不起作用:

Route::any('route/me/here/','Tst@routeme');

Route::any('route/me/here/{id?}','Tst@routeme');

Route::any('route/me/here/and/here','Tst@routeme');

请问有什么建议可以解决这个问题吗?

【问题讨论】:

  • 我很好奇,为什么你的本地和生产环境运行不同版本的 PHP?另外,当您说路线不起作用时,究竟发生了什么?
  • 你使用 Route::any 而不是 Route::get,所以任何基于 Available Router Methods 的 'route/me' 都将检查 get 'route/me',post 'route/me' ,把'route/me',补丁'route/me',删除'route/me',选项'route/me'。尝试将 ::any 更改为 ::get ,并检查您的终端 php artisan route:list
  • @spholt,我知道这很难看,但我的本地还有其他需要该版本的客户端项目。因此差异:\

标签: php laravel routes laravel-7


【解决方案1】:

我的第一个建议是将参数最多的路线放在顶部,例如:

Route::any('route/me/here/and/here','Tst@routeme');

Route::any('route/me/here/{id?}','Tst@routeme');

Route::any('route/me/here/','Tst@routeme');

更像是最先匹配的路由首先执行,因此从上到下,参数最少的路由最后匹配。

第二件事,我建议您将路线分组:

Route::prefix('route/me')->group(function () {
    Route::get('here/and/here', 'Tst@routeme');
    Route::get('here/{id?}', 'Tst@routeme');
    Route::get('here', 'Tst@routeme');
});

为了更好的可读性...

【讨论】:

  • 也试过了,但没有太大帮助 ;(
【解决方案2】:

我无法详细说明为什么会发生这种特殊情况,但匹配您的开发和生产环境应该可以在未来消除这些问题。


家园 Docs

Laravel 团队提供的 Homestead vagrant box 是一个可靠的选择,并且有据可查。它是一台 Ubuntu 18.04 / 20.04 机器,可以配置许多附加组件。您可以通过 Homestead.yaml 文件中的一行轻松配置任何给定项目正在使用的 PHP 版本。

Docker Docs

Docker 稍微先进一点,但在配置方面非常灵活。它的容器设计允许您将一个项目的依赖关系与下一个项目隔离开来。


这些设置并不难(在一两天内轻松完成),并且允许您几乎完美地复制生产环境。

它将在那些“但它在我的机器上工作”的时刻大有帮助!

【讨论】:

    【解决方案3】:

    更新我自己的问题,以便对其他人有所帮助。

    我想说这可能是某人(或至少是我)未能检查的最后一件事。我尝试在我的服务器中列出路由,发现我新添加的路由没有找到。

    php artisan route:list
    
    

    早些时候,我清除了缓存,重新启动了 apache,但没有帮助。最后发现当路由缓存&不工作时,以下命令是救命稻草。 所以对我有用的东西 - 清除“路线”缓存。

    php artisan route:cache 
    php artisan route:clear
    

    衷心感谢@Spholt、@Akbar khan、@Spholt、@Gzai Kun 的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-21
      • 2018-01-15
      • 2018-10-23
      • 2018-01-18
      • 2013-12-26
      • 2014-12-21
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多