Как использовать Composer для загрузки классов php из локального репозитория?

Я новичок в Php и composer, я хочу получить доступ к классу Php к другому модулю, используя composer. Это моя основная структура проекта (два модуля - общий и рабочий) 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

общий / продавец / собирать голоса / test.php

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

общий /composer.json

{
    "name":"canvass/test",
    "type":"package",
    "version": "1.0.0"
}

работник /composer.json

{
    "autoload": {
        "psr-4": {
            "test":"../common/vendor/canvass"
        }
    }
}

работник / 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 или репозиториями, есть ли способ сделать это?

1 ответ

Решение

То, что вы показываете здесь, это один проект TestLocalRepository, который состоит из двух отдельных проектов Composer, common а также worker в Source папка, каждая из которых имеет файл composer.json и собственную папку вендора. Я думаю, что ваша структура проекта не является оптимальной.

С моей точки зрения, вы можете поместить эти два проекта в папку vendor основного проекта, а не в исходную папку. Мое предложение будет использовать один проект TestLocalRepository и включают оба модуля common а также worker как зависимости этого проекта (в вашем composer.json).

Вы бы получили такую ​​структуру:

TestLocalRepository
- composer.json
+- src
   - index.php
+- vendor
    - autoload.php
    +- common           
    +- worker
       - temocaller.php

Сейчас: на composer update, общие и рабочие зависимости будут выбраны и помещены в папку поставщика, а затем будет сгенерирована автозагрузка. Тогда в вашем src/index.php вы бы просто включить require 'vendor/autoload.php'; а также $t = new test/temocaller();;


Если это не то, что вам нужно, вы все равно можете использовать Composer Autoloader и добавить в него пользовательское расположение для классов. В вашем index.php: сначала требуется автозагрузчик, затем добавьте папку в классы автозагрузки, например:

$loader = require 'vendor/autoload.php';
$loader->add('SomeWhere\\Test\\', __DIR__);

или просто добавьте пути к composer.json внутри TestLocalRepository.

Другие вопросы по тегам