Php 通过composer拥有自己的项目

Php 通过composer拥有自己的项目,php,composer-php,Php,Composer Php,我已经通过composer加载了一些库,我想知道是否可以在/vendor映射中添加我自己的库,然后让composer自动加载它?结构类似于/vendor/mylibrary/然后是名称空间mylibrary 这可能吗?是否可以向composer autoloader添加不同的映射?例如/app/src/然后让它加载该文件夹中的所有类?还是我必须自己做装载机 感谢您阅读: 通过向composer.json添加自动加载字段,您甚至可以将自己的代码添加到自动加载程序中 { "autoload"

我已经通过composer加载了一些库,我想知道是否可以在/vendor映射中添加我自己的库,然后让composer自动加载它?结构类似于/vendor/mylibrary/然后是名称空间mylibrary

这可能吗?是否可以向composer autoloader添加不同的映射?例如/app/src/然后让它加载该文件夹中的所有类?还是我必须自己做装载机

感谢您阅读:

通过向composer.json添加自动加载字段,您甚至可以将自己的代码添加到自动加载程序中

{
    "autoload": {
        "psr-0": {"Acme": "src/"}
    }
}

Composer将为Acme命名空间注册一个PSR-0自动加载程序。 您可以定义从名称空间到目录的映射。src目录将位于项目根目录中,与供应商目录处于同一级别。示例文件名是src/Acme/Foo.php,其中包含Acme\Foo类

添加自动加载字段后,必须重新运行安装到 重新生成vendor/autoload.php文件


因此,基本上,您只需要将这一行添加到composer中,告诉composer在哪里可以找到您的库。json是的,当然可以添加自己的库,您应该感到非常鼓舞。如果您的库是公开的,您只需在packagist.org上注册即可。如果不是,那就复杂一点,但也不是不可能

如果您的项目不遵循PSR-0标准,composer将为您创建一个类映射。不支持自定义自动加载器

我建议您阅读关于所有这些的(非常优秀的)文档,如果遇到问题,请回来


是的,你可以做到。按照以下方式配置composer.json文件:

{
    "autoload": {
        "classmap": [ "classes" ]
}
use classes\Model\Article; 
这里的类是目录的名称,您在其中拥有所有与应用程序相关的类。与供应商相关的类也应自动检测。只需添加以下行即可同时实现这两个目标:

require 'vendor/autoload.php';
您可以使用namesapce引用您的类,如下所示:

{
    "autoload": {
        "classmap": [ "classes" ]
}
use classes\Model\Article; 

请注意,PSR-0不是必需的,只是建议使用。在我的例子中,我想将特定于我的应用程序的所有库放在一个“lib”文件夹中,但由于它们都属于我的应用程序,因此为名称空间设置一个子文件夹似乎是多余的(例如,
MyApp
)。我曾想过使用
“autoload”:{“classmap”:[“lib”]}
,但子组件似乎出现了故障,例如
lib/foo
目录包含命名空间为
MyApp\foo
的类。所以现在我想知道我是否应该坚持把我的应用程序特定的库放在
供应商
中,我猜这就是我的预期用途。@MattBrowne希望你没有把它们放在
供应商
中,因为这是composer的空间,而不是你的应用程序的空间,但是你找到解决方案了吗?我希望避免在
src/
下出现冗余的psr-0目录,并允许应用程序的核心目录存在于其中,而不复制整个命名空间(在要自动加载的核心文件上方有
VendorName\ProjectName
)。就我所找到的任何文档或示例而言,Composer都无法做到这一点。不,我意识到它们不应该出现在供应商中。不幸的是,目前避免冗余文件夹结构的唯一方法是编写自己的自动加载器(与composer的自动加载器一起使用)。请参阅我被拒绝的拉取请求:更新:Composer现在支持新的PSR-4标准,这将允许您执行上述操作。
use classes\Model\Article这就是我们要找的,就是如何使用它。