Eenvoudig pakketbeheer met Composer

Laten we eerlijk zijn: PHP heeft een rotsachtige geschiedenis gehad met pakketbeheer en als gevolg daarvan is het vrij zeldzaam om een ​​ontwikkelaar te vinden die actief gebruik maakt van systemen zoals PEAR. In plaats daarvan hebben de meeste ontwikkelaars gekozen voor hun favoriete raamwerk, dat speciaal is geschreven voor het verwerken van verschillende dingen, zoals DB-interactie, ORM's, OAuth, Amazon S3-integratie, enz..

Het nadeel is echter dat schakelen tussen frameworks (of terugkeren naar het niet gebruiken van een framework) een nachtmerrie kan zijn, omdat het betekent dat je alles opnieuw moet leren om gloednieuwe tools te gebruiken - en dat is geen eenvoudige taak. Wel, componist kan dat oplossen!


Invoering

"De lijm tussen alle projecten."

Composer probeert deze situatie op te lossen door zichzelf te positioneren als "de lijm tussen alle projecten" - wat betekent dat pakketten kunnen worden geschreven, ontwikkeld en gedeeld in een formaat dat andere ontwikkelaars met gemak kunnen aansluiten op andere toepassingen.

In dit artikel wordt uitgelegd hoe u Composer-pakketten kunt installeren en gebruiken. Aan het einde van dit artikel kunt u plug-ins en spelen met stukjes code in elk kader, of u nu werkt met CodeIgniter, FuelPHP, Laravel, Symfony2, Lithium, Yii, Zend ... of iets anders.


Stap 1 - Composer installeren

Composer heeft twee logische hoofdonderdelen: er is een repository die pakketten opslaat, en dan is er de opdrachtregeltoepassing waarmee u code kunt vinden, downloaden, bijwerken en delen.

De toepassing installeren op alles wat Unix op smaak brengt, is eenvoudig:

$ cd / path / to / my / project $ curl -s http://getcomposer.org/installer | php

Het is zo eenvoudig als dat! Je hebt nu een composer.phar bestand dat wordt vermeld in uw project, dat alle logica voor het opdrachtregelhulpprogramma bevat.

U kunt bevestigen dat het is geïnstalleerd door het uitvoeren van:

$ php composer.phar

Dit commando zal alle beschikbare commando's onthullen.

Een persoonlijke voorkeur van mij is om een ​​extra opdracht uit te voeren:

$ sudo mv composer.phar / usr / bin / composer

Deze moves het bestand in je prullenbak, waarmee je toegang hebt tot alle commando's met het veel kortere voorbeeld:

$ componist over

Als u Windows gebruikt, kunt u dit bestand downloaden en het door de PHP-interpreter leiden - waar dat ook is geïnstalleerd.


Stap 2 - Begrijpen composer.json

Als u een Ruby-ontwikkelaar bent, bent u waarschijnlijk bekend met de Gemfile. Of Node-ontwikkelaars zullen het weten package.json. Op dezelfde manier gebruikt Composer een composer.json bestand om instellingen en pakketvereisten voor uw toepassing op te geven.

In de meest eenvoudige vorm ziet het compositiebestand er als volgt uit:

"require": "kriswallsmith / assetic": "*"

Dit vereist het "Assetic" -pakket, gemaakt door "kriswallsmith", en vereist elke versie. Als u een specifieke versie wilt opgeven, kunt u in plaats daarvan:

"kriswallsmith / assetic": "1.0.3"

Je kunt zelfs de twee benaderingen combineren, zoals zo:

"kriswallsmith / assetic": "1.0. *"

Hierdoor kan elke kleine update automatisch worden opgenomen, maar niet worden geüpgraded naar 1.1.0, omdat die mogelijk enige interface-wijzigingen heeft die een ontwikkelaar moet uitkijken voor.


Stap 3 - Installatievereisten

Nu dat u een of meer pakketten in uw lijst hebt staan composer.json, je kan lopen:

$ php composer.phar installeren

... Of, als u mijn truc hebt gebruikt om het in te korten op Unix-machines (zie hierboven):

$ composer install

U zult nu merken dat bestanden worden gedownload en in een nieuwe worden geplaatst verkopers / map in de hoofdmap van uw toepassing. Deze logica kan worden gewijzigd met behulp van de volgende configuratieoptie:

"require": "kriswallsmith / assetic": "1.0. *", "config": "vendor-dir": "packages"

Stap 4 - Autoloading

Autoloading in PHP is al een tijdje een rommeltje.

Autoloading in PHP is al een tijdje een rommeltje, omdat elke ontwikkelaar zijn of haar eigen manier heeft om met dingen om te gaan. Sommige pakketten, zoals Smarty, gebruiken hun eigen autoloading, sommige ontwikkelaars plaatsen meerdere klassen in één bestand of hebben kleine bestandsnamen - het is allemaal heel willekeurig.

PSR-0 is een standaard, gemaakt door de PHP Standards Group, om dit probleem te kalmeren; Composer zal er standaard mee werken. Composer bundelt met een PSR-0 autoloader, die u in uw project met slechts één regel kunt opnemen:

include_once './vendor/autoload.php';

Het is duidelijk dat als u de leveranciersmap hebt gewijzigd, u dat moet bijwerken.

U kunt de code nu in uw toepassingen gebruiken:

dump ();

Dit is een voorbeeld van Assetic in gebruik. Ja, er zit veel naamruimtecode in, maar dit wordt gedaan om conflicten tussen pakketten te voorkomen. De naamgevingsconventie voor PSR-0 is in wezen:

\\ (\) *

Een ander voorbeeld is het Buzz HTTP-pakket, dat er als volgt uitziet:

$ browser = nieuwe Buzz \ Browser; $ response = $ browser-> get ('http://www.google.com'); echo $ browser-> getLastRequest (). "\ n"; echo $ antwoord;

Dat lijkt misschien verheerlijkt file_get_contents (), maar het verwerkt allerlei soorten slimme logica op de achtergrond voor het werken met HTTP Response / Request - en je ziet dat de naamruimtesyntaxis iets minder intens is.


Stap 5 - Echte wereld

Als je echt slim wilt zijn, kun je het hele proces automatiseren.

Momenteel slaan de meeste projecten alle PHP-afhankelijkheden op in de hoofdrepository; dus als je de Facebook SDK gebruikt, schuif je die versie gewoon in je code door de code vanuit GitHub te kopiëren of te plakken of een ZIP-bestand uit te pakken. Voeg het vervolgens toe aan uw versiebeheer en druk op de wijzigingen.

Die versie zit dan met je code als een statisch bestand, dat je op een gegeven moment misschien wel of niet meer kunt upgraden - ALS je merkt dat Facebook een bijgewerkte versie heeft uitgebracht. De nieuwe versie van het bestand gaat over de top en je pusht ook die nieuwe veranderingen.

U kan gebruik Composer om te voorkomen dat u op de versies moet letten en voer gewoon een update uit en leg alle wijzigingen vast. Maar waarom hebben heel veel code in je repository die je daar niet nodig hebt??

De mooiste oplossing is om toe te voegen verkopers / naar uw "Negeer" -lijst (bijv .: .gitignore) en houd uw code daar volledig buiten. Wanneer u code naar uw hosts implementeert, kunt u ze gewoon uitvoeren componist installeren of update van de componist.

Als je echt slim wilt zijn, kun je het hele proces automatiseren, dus als je in de cloud hosting hebt, kun je haken opzetten om te rennen componist installeren zodra je nieuwe code wordt ingedrukt!


Samenvatting

Je zult nog veel meer van Composer gaan zien, omdat verschillende PHP-raamwerken begonnen zijn met het bieden van verschillende niveaus van integratie; FuelPHP wordt gebouwd als Composer-pakketten, CodeIgniter ondersteunt autoloading en Symfony2 gebruikt het al op grote schaal.

Composer is een geweldige manier om afhankelijkheden aan uw projecten toe te voegen zonder PECL-extensies te hoeven installeren of een aantal bestanden te moeten kopiëren en plakken. Die manier van doen is extreem verouderd en vereist te veel tijd van een ontwikkelaar.