2014-08-29 68 views
1

我在PHP中遇到一些与命名空间有关的问题。PHP在作曲家的供应商软件包上定义命名空间

我已经掌握了一切,并在我的项目中工作,这一切都运行良好。我使用作曲家的自动加载功能来自动加载我的所有项目类。

最近我需要通过composer为securimage引入依赖(captcha应用程序)。我有问题是,它不会工作,直到我去编辑文件,插入在每个PHP脚本:

<?php namespace vendor\dapphp\securimage; 

我composer.json文件使用PSR-4,如果顶部以下这有助于确定我要出错的地方。

"psr-4": { 
      "vendor\\dapphp\\securimage\\": "vendor/dapphp/securimage" 
     } 

我的情况下,问题不是很明显我怎么拉作曲家供应商项目和使PHP自动插入/了解到,这些应该命名空间

vendor\{userid}\{projectid} 

下放置不编辑实际内的文件。

我确定我错过了composer.json文件中的内容?

回答

1

你还没有真的错过任何东西。这取决于一个命名空间的源代码包。除非源代码字面上包含namespace声明,否则代码位于全局名称空间中。在不更改所有涉及的源代码的情况下,您无法改变这一事实。 Securimage代码不是命名空间,句点。

"psr-4": { 
    "vendor\\dapphp\\securimage\\": "vendor/dapphp/securimage" 
} 

这只是配置自动装载机。意思是,你应该尝试在命名空间vendor\dapphp\securimage\...中加载一个类,Composer的自动加载器知道在哪里找到它。它不会将代码放置在这个名称空间中。

+0

谢谢你的回答。那么当将来他们决定命名空间的时候会发生什么,而且我已经掌握了一切,以解决他们在全局命名空间中的类问题? – Dal 2014-08-29 09:33:37

+0

然后你将不得不更新你的代码。 :)把一些东西放入一个名字空间基本上和重命名所有东西或改变一个函数签名一样。它必然打破向后兼容性,没有真正的方法来避免它。 – deceze 2014-08-29 09:35:21

+0

我以为我是通过使用名称空间来做正确的事情。我没想到最终会有第三方阻碍我自己的项目。他们真的没有做好这个命名空间的事情,因为它感觉像是最后一分钟的黑客攻击。 我想我只是分叉项目和更新他们的代码,所以至少我有一些控制它。非常感谢,你已经满足了我的问题 - 非常感谢你! :) – Dal 2014-08-29 09:40:07

相关问题