Ho un paio di librerie [Foo e Bar] che sto sviluppando di concerto, ma sono ancora cose tecnicamente separate. In precedenza ho appena ridefinito il caricatore automatico in modo che piaccia "Foo\\": "../Foo/src"
, ma ora che ho aggiunto una dipendenza Guzzle a Foo, Bar ribalta il suo coperchio perché non è una delle sue dipendenze.
Struttura delle directory:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Dichiarazione di caricamento automatico teorica: [in Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Codice di esempio:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Come posso risolvere questo problema senza configurare un repository Composer locale? Voglio mantenerli come pacchetti separati, solo che uno richiede l'altro, e quindi elabora le dipendenze dell'altro.
modifica post risposta:
Grazie a infomaniac ho fatto quanto segue:
Inizializzato il repository git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Aggiunta la configurazione del compositore:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
E poi composer update
!
sammitch/foo
è il nome del pacchetto e non ha letteralmente nulla a che fare con il luogo in cui si trova. Costruirà un elenco di pacchetti disponibili in base ai suoi repository configurati, in questo caso recuperando composer.json dal repository git locale specificato, quindi il compositore gestirà il resto. Il sammitch/foo
pacchetto viene copiato nella vendor
cartella dell'app corrente come qualsiasi altro pacchetto.