Как использовать 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.