【问题标题】:Laravel 4 controller file name change causing include errorLaravel 4控制器文件名更改导致包含错误
【发布时间】:2013-08-26 21:29:38
【问题描述】:

我最近在网络上部署了一个 Laravel 4 项目,经过本地广泛的测试,离线没有问题,但上线后出现了一些奇怪的问题。

该项目有一个 Git 存储库,我的 IDE (PHPStorm) 有时不会注意到一个控制器在存储库中发生更改 - 我会进行更改,尝试提交,它会显示一个错误,说没有变化。此外,在某一时刻,该文件以某种方式从“News.php”重命名为“news.php”。我将文件的大小写改回大写 N 我没有重命名项目中的任何其他内容 - 对此类(以及因此文件)的所有引用仍然是“新闻”。

今天早上出乎意料的是,一条使用 News 控制器的路由导致了 500 错误,指出它无法包含有问题的文件。我检查了 FTP 文件系统并确认该文件存在且完整无缺,似乎没有任何问题。在经历了很多挫折之后,我将文件重命名为“news.php”(小写),一切都恢复了。我尝试再次将其重命名为“News.php”并返回 500 错误。

发生的另一件奇怪的事情是对控制器操作的引用都是小写的(我的疏忽?)并且应用程序随机崩溃并出现 500 错误 Class Not Found。我在本地测试了该应用程序,无论是小写还是大写都可以正常工作,将控制器引用从“admin_news”重命名为“Admin_News”解决了生产服务器上的问题。

Laravel 4 是否有某种缓存可能会引用“news.php”并拒绝使用“News.php”?对这种奇怪的行为有什么想法吗?

【问题讨论】:

  • 查看 app/storage/compiled.php,这可能是您的问题所在。另外,你用的是什么类型的电脑?文件系统不区分大小写吗?
  • 该项目是您真正在 Windows、Mac 和 Linux 上制作的。无论当时在哪里。编译的好建议,我早上开始检查。
  • 我刚刚检查过,我没有 app/storage/compiled.php - 这通常出现在 Laravel 4 中吗?并且不确定在这种情况下是否重要,但我使用的是 rtablada 软件包安装程序,github.com/rtablada/package-installer
  • Laravel 会在 composer 用于安装/更新时创建该文件(查看 composer.json 以查看更新时运行的命令 - php artisan clear-compiledphp artisan optimize)。我不确定它们是否可以在任何情况下都没有可用的 PHP 可执行文件的 Windows 上工作,所以 compiled.php 可能不适合你。

标签: php git laravel laravel-4


【解决方案1】:

更改路由或控制器时,请尝试

composer dump-autoload

它会用新的名称/内容重建自动加载器

【讨论】:

  • 谢谢,这成功了!又出乎意料地发生了......你拯救了这一天
【解决方案2】:

当我读到你的问题时,首先想到的是你是在 windows 计算机上开发并在 linux 服务器上部署(或相反?)

我在设置时遇到了类似的问题,我在工作时在 Windows 机器上开发,然后我们部署到 linux 服务器。 Windows 上的文件系统似乎不区分大小写,因此 news.php = News.php 而 linux 文件系统区分大小写。命名空间名称似乎也是如此。 /App/Models/Auth = Windows 上的 /App/models/Auth 而非 linux。在我弄清楚之前,这引起了一些头痛。

我现在已经开始使用 Vagrant 建立一个本地开发区域,该区域是我正在部署的系统的镜像,这意味着如果它可以在一个系统上运行,它将在另一个系统上运行。

【讨论】:

  • 好建议。我将所有内容推送到 BitBucket,然后将其拉到我正在使用的任何机器上——我在家里的 Mac、路上的 Windows 或 Linux 笔记本电脑上编写代码。我在所有情况下都使用 PHPStorm。网络主机确实是基于 Linux 的。
【解决方案3】:

也许你想检查一下 Laravel IDE Helper generator for PHPstorm。你可以从 github 上得到它:https://github.com/barryvdh/laravel-ide-helper 我猜你在 PHP Storm 的重构特性上遇到了问题,在不询问的情况下更新了你的代码的某些部分。无论如何,生成器将帮助您从 PHP Storm 中识别出许多这些问题,并简化整个开发过程。

希望对你有帮助。

【讨论】:

  • 是的,已经使用助手很久了,喜欢它。忘记重构了,好主意。
【解决方案4】:

Laravel 有一种访问模型和控制器的方法。我总是将文件命名为类的名称(例如,如果类被命名为 BaseController,则文件必须命名为 BaseController.php)。但也许 PHP Storm 的使用是在做一个框架无法控制的动作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2018-09-25
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多