如何使用Composer从本地存储库加载php类?

如何使用Composer从本地存储库加载php类?,php,json,composer-php,psr-0,psr-4,Php,Json,Composer Php,Psr 0,Psr 4,我不熟悉Php和composer,我想使用composer访问另一个模块的Php类,这是我的基本项目结构(两个模块common和worker) index.php TestLocalRepository --/Souce Files --/common --/vendor --/canvass --/test --test.php --/composer

我不熟悉Php和composer,我想使用composer访问另一个模块的Php类,这是我的基本项目结构(两个模块common和worker) index.php

TestLocalRepository
--/Souce Files
    --/common
        --/vendor
            --/canvass
                --/test
                    --test.php
            --/composer
            --autoload.php
        --composer.json
    --/worker
        --/vendor
            --/composer
        composer.json
        temocaller.php
    --index.php
common/vendor/canvass/test.php

<?php
namespace test;
class test {
    //put your code here
    function __construct() {
        echo "hello";
    }
}
?>
worker/composer.json

{
    "name":"canvass/test",
    "type":"package",
    "version": "1.0.0"
}
{
    "autoload": {
        "psr-4": {
            "test":"../common/vendor/canvass"
        }
    }
}
worker/tempcaller.php

<?php
require_once dirname(__FILE__) . '../vendor/autoload.php';
use test;
class tempcaller {
    //put your code here    
    function __construct() {
        echo "tempcaller";
        $obj = new test();
    }
}
$t = new tempcaller();
?>


我也不能用psr-0或存储库这样做,有什么方法可以做到这一点吗?

您在这里展示的是一个项目
TestLocalRepository
,它由
文件夹中的两个独立的编写器项目
common
worker
组成,他们每个人都有一个composer.json文件和自己的供应商文件夹。 我认为你们的项目结构不是最优的

在我看来,您可以将这两个项目放在主项目的供应商文件夹中,而不是源文件夹中。我的建议是使用一个项目
TestLocalRepository
,并将模块
common
worker
作为该项目的依赖项(在
composer.json
中)

你会得到这样一个结构:

TestLocalRepository
- composer.json
+- src
   - index.php
+- vendor
    - autoload.php
    +- common           
    +- worker
       - temocaller.php
现在:在
composer更新中
,将获取依赖项common和worker并将其放入供应商文件夹,然后生成自动加载。 然后,在
src/index.php
中,只需包含
require'vendor/autoload.php'
$t=新测试/temocaller()


如果这不是您想要的,那么您仍然可以使用Composer Autoloader 并为类添加自定义位置。 在index.php中:首先需要自动加载程序,然后将文件夹添加到自动加载类中,如下所示:

$loader = require 'vendor/autoload.php';
$loader->add('SomeWhere\\Test\\', __DIR__);
或者只需将路径添加到TestLocalRepository中的
composer.json