2014-09-02 127 views
15

以下问题:我在我的composer.json定义的类映射:作曲类映射自动加载不加载文件夹中的新文件

"autoload": { 
    "classmap": [ 
     "app/controllers", 
     "app/models", 
     "app/helper.php" 
    ] 
} 

然而,当我在“控制器”创建一个新的文件或者“模型“文件夹,它不会加载它们,我总是必须做一个作曲家转储自动加载。

这是正确的行为吗?我以为作曲家的自动加载器会监视文件夹中的新文件吗?

回答

16

是的,这是正确的行为。如果您希望自动加载新类,则必须使用PSR-0或PSR-4自动加载。

生成类图需要Composer知道包含某个类的文件名。这只能通过解析目录中的所有源代码并扫描类,接口和特征定义来完成。

这通常是一个CPU和I/O密集型任务,所以只有在Composer安装/更新或(按需)转储自动加载器时才会执行此操作,但不会在每个require "vendor/autoload.php";都完成。

请注意,类映射自动加载仅适用于旧版遗留代码库,该代码库至少未实现PSR-0。它不适用于新代码 - 除非您想在开发过程中一次又一次地支付自动加载器的价格。

+0

好的......非常感谢! – pyxl 2014-09-03 07:06:12

+0

“请注意,类图自动加载仅适用于旧版遗留代码库,该代码库至少未实现PSR-0”。 不完全正确。请参阅dump-autoload的文档: “--optimize(-o):将PSR-0/4自动加载转换为classmap以获得更快的自动加载器。特别推荐用于生产,但可能需要一些时间才能运行所以它目前没有默认完成。“ – spekary 2017-04-15 15:28:18

+0

优化自动装载器与定义自动装载方案不同。如果未来版本的PHP提供了对PSR-4的引擎级支持,Composer可能会在优化此类版本时放弃类地图,但如果该类地图是定义自动加载的方式,则必须保留类地图。 – Sven 2017-04-18 21:02:47

6

通过SSH转到您的服务器的根目录。现在执行以下操作:

  1. 运行ls列出所有文件。
  2. 你会看到composer.lock文件;用rm composer.lock命令删除该文件。
  3. 现在运行php composer update命令。

根据您的linux类型,您可能需要运行php-cli composer update

第3步将创建一个新的composer.lock文件,并且所有类将再次加载。无论何时您添加新课程,都可以这样做。

或:

  1. 运行composer dump-autoload命令。
+1

感谢斯文的编辑 – 2016-01-09 15:41:12

-2

Puedes秋波埃斯特后,胡斯托estaba buscando LO MISMO阙VOSŸlogre encontrar拉respuesta EN埃斯特后:

http://phpenthusiast.com/blog/how-to-autoload-with-composer


你可以看到这篇文章,我只是在寻找与你一样,并设法找到在这篇文章中的答案:

http://phpenthusiast.com/blog/how-to-autoload-with-composer

+3

请添加更多的答案,而不仅仅是一个链接。有时候链接不好,答案也不会好。另外,你为什么用两种不同的语言两次回答? – Chillie 2017-01-23 17:24:22