【问题标题】:Composer Autoload.php not loading in Namespaces and Classes on live hostingComposer Autoload.php 未在实时托管的命名空间和类中加载
【发布时间】:2017-06-23 17:30:54
【问题描述】:

我有一个简单的 PHP Web 应用程序,结构如下:

/         (composer.json .htaccess ...)  
/Core/    (Router.php, Controller.php ...)    
/App/     (/Controllers, /Models, /Views ...)    
/Public/  (index.php ...)  
/Vendor/  (autoload.php /composer ...)  

代码在我的本地服务器上运行没有问题。

当我将它复制到实时服务器并对路由中的 .htaccess 进行必要的更改时,我收到以下错误:致命错误:在...中找不到类“Core\Router”。我尝试了 3 个不同的主机,但是不走运。

这个问题似乎与 composer autoload 函数没有在使用 psr-4 的命名空间和类中加载有关。我在 composer.json 文件中设置了这个:

{
"autoload": {
    "psr-4": {
         "Core\\": "Core/",
         "App\\": "App/"
    }
}

我的项目的代码在 GitHub 上

https://github.com/imoprojects/upbook

我是在 MVC 结构中编程以及以这种方式使用 composer 的新手。

如果有人能协助解决可能发生的事情,我将不胜感激。

干杯, 伊恩

【问题讨论】:

  • 你复制项目后在服务器上做了composer install吗?如果您复制包含供应商文件夹的文件,请执行composer dump 以刷新自动加载器。
  • 作为旁注,您不应该提交您的供应商目录。这应该在每次部署时通过composer install 自动生成。如果有的话,你应该提交你的composer.lock
  • @apokryfos 出于某种原因,当我运行 composer install 时,composer 不会生成 composer.lock 文件。我以为是因为我没有引入任何第三方库?谢谢你的建议,下次提交时我会忽略它
  • @IMO 你的特殊情况不会生成一个,因为你不需要任何额外的包。这就是为什么我在最后添加了“如果有的话”部分。

标签: php .htaccess composer-php autoloader psr-4


【解决方案1】:

你配置这个:

"Core\\": "Core/",

...但是您的课程在:

core

这仅适用于不区分大小写的文件系统。

【讨论】:

  • 谢谢@Álvaro 给我带来了这么多麻烦。在命名文件夹和文件方面是否有我应该遵循的标准?我是开发新手,我正在努力学习好的做法。
  • 非常感谢,这次我会阅读文档 :) ... 很多东西要学!
  • 哇,太可惜了,过去 12 小时让我发疯……从来没有想过操作系统之间如此简单的差异会产生如此巨大的影响。更糟糕的是,数百个文件中只有一个有错误案例!!!!我今晚要跳舞。
猜你喜欢
  • 2014-10-10
  • 2021-06-18
  • 2013-11-30
  • 2016-12-08
  • 2014-03-17
  • 2016-01-22
  • 1970-01-01
  • 2014-05-02
相关资源
最近更新 更多