) este un manager de dependență relativ nou și deja destul de popular pentru PHP. Puteți descrie de ce biblioteci depinde proiectul dvs. și Composer va instala bibliotecile necesare pentru dvs.! Mai mult, Composer nu este un manager de pachete în sensul clasic. Da, funcționează cu entități, pe care le vom numi „pachete” sau biblioteci, dar acestea sunt instalate în interiorul fiecărui proiect separat, și nu global (aceasta este una dintre principalele diferențe față de vechiul PEAR bun).
Pe scurt cum funcționează:
- Ai un proiect care depinde de mai multe biblioteci.
- Unele dintre aceste biblioteci depind de alte biblioteci.
- În proiectul tău, descrii acele biblioteci de care depinde direct codul tău.
- Composer găsește versiunile potrivite ale bibliotecilor necesare pentru întregul proiect, le descarcă și le instalează în folderul proiectului.
A fost proiectat și dezvoltat inițial de doi oameni Nils Adermann și Jordi Boggiano, acum există mai mult de douăzeci de colaboratori la proiect. Proiectul este scris în PHP 5.3, distribuit sub licența MIT și disponibil pe github.
Primele comiteri au fost făcute în aprilie 2011, iar astăzi Composer este în stadiul „alpha3”. Cu toate acestea, este deja destul de stabil și este folosit de multe proiecte PHP populare (de exemplu, Symfony 2). O listă a proiectelor care utilizează Composer poate fi găsită pe site-ul web packagist.org - acesta este depozitul oficial al pachetelor Composer. Apropo, la recenta conferință Devconf 2012, dezvoltatorul cadrului Yii a menționat în raportul său că Yii2 cel mai probabil va folosi și Composer.
În acest articol voi descrie pe scurt principalele caracteristici ale Composer și vom încerca să creăm un proiect demonstrativ folosind Composer pentru descărcare bibliotecile necesare. Toate exemplele vor fi disponibile pe github.com și bitbucket.org.
Ce poate face Composer?
- Descărcați pachete și dependențele acestora;
- în mod implicit, pachetele sunt descărcate din depozitul oficial packagegist.org. Oricine își poate adăuga liber propriul pachet acolo pentru a face instalarea acestuia cât mai ușoară și convenabilă pentru întreaga lume;
- pachetele pot fi descărcate nu numai de pe packagist.org, ci și din orice depozit git, mercurial sau svn;
- nu este necesar la descărcarea pachetelor de pe github.com sau bitbucket.org sistem instalat controlul versiunii (git sau hg), Composer funcționează prin API-ul acestor site-uri;
- Depozitul git/hg/svn cu pachetul poate fi localizat nu numai pe unul dintre site-urile enumerate mai sus, ci în orice alt loc, de exemplu, în rețeaua locală a unei întreprinderi sau chiar pe un hard disk local;
- in plus, biblioteca de instalat nu trebuie sa fie sub forma unui pachet Composer pe care il puteti instala din orice depozit git/hg/svn al oricarei structuri;
- în sfârșit, pachetul de instalat nu trebuie să fie un depozit git/hg/svn, poate fi un fișier zip arbitrar disponibil la orice uri!
- toate pachetele sunt instalate în directorul curent (de unde a fost executată comanda de instalare), acest lucru vă permite să aveți mai multe versiuni diferite de biblioteci atunci când lucrați la diferite proiecte în paralel;
- Comanda de actualizare actualizează toate pachetele instalate (sau reinstalează șterse accidental) la cele mai recente versiuni. Sau este posibil să nu fie nevoie să actualizați versiunile la cele mai recente dacă creați un fișier special composer.lock - acest lucru vă permite să remediați o combinație de versiuni stabile ale tuturor bibliotecilor utilizate în proiect;
- După instalarea pachetelor, se generează automat autoload.php, cu care puteți conecta bibliotecile instalate în codul proiectului. Când pregătiți un pachet Composer, este recomandat să utilizați PSR-0 - un standard pentru locația și denumirea fișierelor PHP, astfel încât încărcarea automată să le poată găsi cu ușurință. În orice caz, autorul pachetului poate descrie regulile prin care autoload va căuta fișiere din anumite clase sau spații de nume. Dacă instalați o bibliotecă care nu este ambalată ca pachet Composer (de exemplu, un depozit git personalizat de la github), atunci sarcina de a descrie regulile de încărcare automată cade pe umerii dumneavoastră. Deci nu există magie cu autoload.php generat - poate încărca totul (chiar și biblioteci cu un set de funcții în afara claselor), principalul lucru este că regulile sunt descrise (de autorul bibliotecii sau de către tine).
Exemplu de lucru: folosirea Composer în proiectul nostru
Pentru a ne da seama cum să folosim Composer, vom scrie un mic proiect în PHP: „Super Hello World, deoarece nu vrem să reinventăm roata și să scriem cod de la zero, vom lua biblioteci și cadre gata făcute”. .Vom folosi următoarele biblioteci:
- Microcadru Silex
- Motor de șablon Twig (disponibil ca pachet Composer pe packagegist.org),
- propriul nostru logger de vizite SuperLogger, pe care l-am conceput ca pachet Composer și l-am publicat pe github
- vechea noastră dar îndrăgita bibliotecă moștenită superlib, care constă dintr-un amestec de clase fără spații de nume și funcții fără clase; biblioteca este publicată pe github, dar nu este un pachet Composer
Cum vom face asta acum: folosim Composer - va descărca toate bibliotecile și va genera autoload.php pentru noi. În plus, dacă dorim să arătăm „Super Hello World” colegilor noștri, va fi suficient să publicăm codul proiectului nostru pe github (sau altundeva), fără a include toate bibliotecile necesare în depozit și fără a pregăti instrucțiuni lungi. pentru instalarea lor. Colegii noștri vor trebui doar să descarce (clone) „Super Hello World” și să execute comanda
instalare php composer.phar
Composer este distribuit ca un singur fișier compozitor.phar(phar este o arhivă php) - în esență este un script PHP care poate accepta mai multe comenzi (instalare, actualizare, ...) și poate descărca și dezambala biblioteci.
Apropo, puțin despre sintaxa de lansare.
Dacă sunteți pe Windows, cel mai probabil veți scrie ceva de genul
php C:\path\to\composer.phar install
Îți poți face viața mai ușoară creând composer.bat și punându-l în %PATH%.
Pe Linux și OS X, puteți configura o comandă ca
instalarea compozitorului
compozitor.json
Deci, suntem gata să scriem proiectul nostru Super Hello World. Și tocmai l-am scris: http://github.com/pqr/superhelloworld. Codul constă dintr-un fișier index.php în directorul web și un șablon layout.twig în directorul vizualizări.Capul tuturor este dosarul compozitor.json. Ar trebui să fie în rădăcina proiectului, în cazul nostru lângă directoarele web și vizualizare. În acest fișier trebuie să indicăm de ce biblioteci depinde proiectul nostru. În plus, dacă aceste biblioteci nu sunt pachete Composer ambalate, atunci trebuie să specificați unele Informații suplimentare despre biblioteca instalată (de exemplu, descrieți regulile de încărcare automată a claselor și funcțiilor pentru autoload.php).
Composer.json, după cum ați ghicit, are un format de date JSON. La intrebarea " de ce JSON?„Dezvoltatorii de compozitori răspund” Deoarece. Doar acceptă-l.".
Trebuie să descriem un obiect js care va conține toate instrucțiunile. Primele și cele mai importante instrucțiuni: cere.
Conectăm pachete de la packagegist.org
( "necesită": ( "php":">=5.3.0", "silex/silex":"dev-master", "twig/twig":">=1.8,<2.0-dev" } }Aici am descris dependența proiectului de versiunea PHP 5.3.0 și superioară, de silex (microframework) și de twig (motor de șablon). Silex și Twig sunt disponibile ca pachete Composer pe packagegist.org, deci nu necesită setări suplimentare. Observ că Silex, la rândul său, depinde de mai multe pachete - toate vor fi descărcate și instalate automat.
Numele pachetului este format din două părți separate printr-o bară oblică: numele furnizorului(numele vânzătorului) și nume de bibliotecă. Numele furnizorului este adesea porecla autorului sau numele companiei. Uneori, numele vânzătorului este același cu numele bibliotecii sau al cadrului în sine.
Pentru fiecare pachet, trebuie să specificați un număr de versiune. Aceasta ar putea fi o ramură în depozit, de exemplu, „dev-master” - prefixul dev semnalează că acesta este numele ramurii, iar ramura în sine este numită „master” în consecință. Pentru depozitul mercurial, o intrare similară va arăta ca „dev-default”. De asemenea, puteți specifica reguli mai complexe ca număr de versiune utilizând operatori de comparație. Apropo, dacă descărcați cod dintr-un depozit de la distanță, Composer scanează etichetele și numele ramurilor din acel depozit pentru ceva similar cu numerele de versiune, de exemplu, eticheta „v1.2.3” va fi folosită ca indicator către versiunea 1.2.3. .
Ne conectăm la propriul nostru pachet Compsoer
Apoi, să conectăm propriul nostru pachet SuperLogger, care este formatat corect, dar publicat nu pe packagist.org, ci pe github:( "necesită": ( "php":">=5.3.0", "silex/silex":"dev-master", "twig/twig":">=1.8,<2.0-dev", "mycompany/superlogger":"dev-master" }, "repositories":[ { "type":"git", "url":"http://github.com/pqr/superlogger" } ] }
Pentru ca Composer să știe unde să caute pachetul „mycompany/superlogger”, am adăugat o matrice depozite cu un link către depozitul github corespunzător. Vă rugăm să rețineți că intrările din matricea de depozite nu sunt direct legate în niciun fel de blocul require - corespondența dintre pachete și depozite nu este specificată. Din câte am înțeles, Composer caută toate pachetele necesare în toate depozitele specificate (inclusiv pe site-ul web packagist.org) și descarcă potrivirile găsite conform unor priorități interne. Încă nu am înțeles mai profund acest punct, corectează-mă dacă știe cineva detaliile.
Conectați un depozit git arbitrar
Acum să conectăm biblioteca noastră moștenită superlib, care este pe github, dar nu este un pachet Composer oficial, deoarece ea este foarte bătrână.( "necesită":( "php":">=5.3.0", "silex/silex":"dev-master", "twig/twig":">=1.8,<2.0-dev", "mycompany/superlogger":"dev-master", "pqr/superlib":"1.2.3" }, "repositories":[ { "type":"git", "url":"http://github.com/pqr/superlogger" }, { "type":"package", "package":{ "name":"pqr/superlib", "version":"1.2.3", "source":{ "type":"git", "url":"http://github.com/pqr/superlib", "reference":"master" }, "autoload":{ "classmap":["timer.php"], "files":["lib_functions.php"] } } } ] }
A fost adăugat un obiect la matricea de depozite care descrie complet pachetul pqr/superlib. În esență, aceasta este descrierea pe care autorul bibliotecii ar trebui să o facă și să o pună în depozitul său. Dar, conform termenilor sarcinii, superlib nu este un pachet Composer oficial, așa că a trebuit să creăm descrierea acestuia ca parte a proiectului Super Hello World. În mod similar, puteți conecta orice altă bibliotecă, inclusiv. fișier zip simplu.
Conectați un fișier zip simplu
De exemplu, așa ar putea arăta o descriere a unei dependențe de motorul de șablon Smarty, distribuită ca fișier zip cu surse în svn:( "depozite":[ ( "tip":"pachet", "pachet":( "nume":"smarty/smarty", "versiunea":"3.1.7", "dist":( "url":" http://www.smarty.net/files/Smarty-3.1.7.zip", "type":"zip", "source":( "url":"http://smarty-php.googlecode. com /svn/", "type":"svn", "reference":"tags/Smarty_3_1_7/distribution/" ) ) ) ], "require":( "smarty/smarty":"3.1.*" ) )
instrucțiuni de încărcare automată
Să revenim la proiectul nostru.Când descriem „pqr/superlib”, am adăugat instrucțiuni încărcare automată. Specifică fișierul timer.php, în care viitorul autoloader va căuta clase, și specifică un fișier cu funcții lib_functions.php - va fi forțat să fie conectat la începutul autoload.php.
Deci, proiectul nostru constă în:
- rădăcina conține fișierul composer.json;
- directoarele web și vizualizări sunt situate în rădăcină;
- în interiorul directorului web există un fișier cu „logica de afaceri” a aplicației noastre: index.php;
- în interiorul directorului vizualizări există un fișier șablon layout.twig;
- În plus, în folderul web am pus .htaccess (pentru apache) și web.config (pentru IIS 7.5) cu regulile mod_rewrite/url rewriter - nu au nicio legătură directă cu configurarea Composer.
Rulați instalarea compozitorului
instalare php composer.pharComposer clonează depozitele și le despachetează la versiunea dorită într-un director vânzător, pe care el însuși o creează în rădăcina proiectului. După despachetare, în directorul furnizorului vom găsi:
- fișierul autoload.php
- directoare de servicii.compozitor și compozitor
- pimple - un pachet care a fost dezvoltat împreună cu microframework-ul Silex
- silex este microframework-ul în sine, l-am solicitat în mod explicit atunci când descriem dependențele
- symfony - unele componente din Symfony 2 care sunt necesare pentru ca Silex să funcționeze
- twig este un motor de șablon pe care l-am solicitat în mod explicit
- mycompany - în interiorul acestui director va exista un depozit de superlogger descărcat de pe github
- pqr - în interiorul acestui director va exista un depozit superlib, descărcat și de pe github
Cum să-ți creezi propriul pachet Composer?
În acest proiect am folosit Composer din perspectiva consumatorului de biblioteci. Cum poți crea singur un pachet Composer, astfel încât oricine altcineva să-l poată folosi?De fapt, am creat unul dintre aceste pachete când am pregătit exemplele pentru acest articol. La rădăcina depozitului superlogger există un fișier composer.json cu o structură similară, care descrie pachetul în sine și dependențele acestuia (în cazul superlogger nu există dependențe). Alte exemple: depozitele silex și twig, care au fost descărcate în folderul furnizorului - toate au un fișier composer.json în rădăcină - uite, studiază!
Și, bineînțeles, nu uitați de documentația de pe site-ul oficial getcomposer.org/doc/.
Îți voi lăsa acest subiect să-l studiezi pe cont propriu.
Să rezumam
În acest articol, am explicat ce este Composer, istoria sa și am descris principalele sale caracteristici. Am încercat să creăm un proiect care să folosească Composer pentru a instala pachete de pe packagist.org și din propriile noastre depozite.E timpul să-l încerci!
- Descărcați Composer (getcomposer.org/download/)
- Descărcați superhelloworld (git clone git://github.com/pqr/superhelloworld.git)
- Instalați dependențe (cd superhelloworld && php composer.phar install)
- Examinați folderul furnizor care apare și autoload.php generat
- Utilizați Composer în proiectele dvs
… - PROFIT!!!
Câteva link-uri de adăugat
Composer a revoluționat gestionarea pachetelor în PHP și a ajutat dezvoltatorii din întreaga lume să creeze cod partajat și independent de cadru. Dar totuși, puțini oameni trec dincolo de elementele de bază ale funcționalității sale, așa că acest articol va încerca să evidențieze câteva tehnici utile de utilizare.
Instalare globală
Deși această opțiune este descrisă clar în documentație, Composer poate (și în majoritatea cazurilor ar trebui) să fie instalat global. O instalare globală înseamnă că, în loc de:Php compozitor.phar somecommand
În orice proiect puteți introduce pur și simplu:
Compozitor o comandă
Acest lucru face foarte ușor să creați proiecte noi (de exemplu, folosind comanda crea-proiect) oriunde în sistemul dvs. de fișiere.
Pentru a instala Composer la nivel global, urmați aceste instrucțiuni.
Instalarea corectă a dependențelor
Când citesc instrucțiuni introductive sau fișiere README, mulți vă vor scrie ceva de genul:Doar adăugați următoarele la composer.json fişier:
("necesita": ("proiectul meu": "o versiune"))
Dar această abordare are mai multe dezavantaje. În primul rând, simplu copy-paste poate duce la erori. În al doilea rând, este posibil să nu fie evident pentru un începător unde să plaseze acest cod dacă are deja un fișier extins compozitor.json, iar acest lucru va duce și la o eroare. În cele din urmă, unii oameni vor folosi Composer pentru prima dată și poate pentru prima dată vor întâlni linia de comandă. Prin urmare, este o practică bună să acoperiți tot felul de cazuri în care începătorii s-ar putea simți nesiguri (au un editor grafic sau vor folosi linia de comandă? Dacă aceasta din urmă, are instalat un editor de text și, dacă da, care Vă explicați procedura de editare a fișierului. Dacă fișierul composer.json nu există încă în proiect, descrieți și principiul creării unui fișier nou?
Cel mai bun mod de a adăuga o nouă dependență la un fișier compozitor.json- aceasta este pentru a folosi comanda cere:
Composer necesită un pachet/un pachet: o versiune
Acest lucru va adăuga tot ce este necesar la fișierul de dependență fără intervenție manuală.
Dacă trebuie să adăugați pachete la secțiune cere-dev, adăugați opțiunea la comandă --dev:
Composer necesită phpunit/phpunit --dev
De asemenea, echipa cere acceptă adăugarea mai multor pachete în același timp, doar separați-le cu un spațiu.
Blocați fișierele
Fişier compozitor.blocare salvează lista curentă a dependențelor instalate și versiunile acestora. În acest fel, în momentul în care versiunile de dependență sunt deja actualizate, alte persoane care clonează proiectul dvs. vor primi aceleași versiuni. Acest lucru asigură că toți cei care primesc proiectul dvs. au un „mediu de pachet” identic cu cel pe care l-ați folosit în timpul dezvoltării și vă ajută să evitați erorile care ar putea apărea în urma actualizărilor versiunii.De asemenea, dosar compozitor.blocare conține hash-ul fișierului compozitor.json, deci chiar dacă actualizați doar detaliile autorului proiectului, veți primi un avertisment că fișierul de blocare nu se potrivește .json fişier. În acest caz, echipa va ajuta actualizare compozitor --lock, care va actualiza doar fișierul de blocare în sine, fără a atinge nimic altceva.
Versiune
Când specificați versiuni de pachet valide, puteți utiliza potrivirea exactă ( 1.2.3 ), intervale cu operatori de comparare ( <1.2.3 ), combinații ale acestor operatori ( >1.2.3 <1.3 ), „ultimul disponibil” ( 1.2.* ), caracter tilde ( ~1.2.3 ) și caret ( ^1.2.3 ).Ultimele două instrucțiuni merită o explicație separată:
- indicație tilde ( ~1.2.3 ) va include toate versiunile până la 1.3 (nu inclusiv), deoarece în versiunea semantică acesta este momentul introducerii de noi funcționalități. În acest caz, se va obține ultima dintre versiunile minore stabile. După cum se arată în documentație, cu această indicație, numai ultima cifră a versiunii.
- specificarea accentului ( ^1.2.3 ) înseamnă literal „feriți-vă doar la schimbarea modificărilor” și va include versiuni până la 2.0 . În ceea ce privește semver, schimbarea versiunii majore este momentul în care se fac modificări rupturi ale proiectului, deci versiunile 1.3 , 1.4 Şi 1.9 se potrivesc în timp ce 2.0 - nu mai.
Configurație locală și globală
Valorile implicite ale parametrilor nu sunt stabilite în piatră. Descrierea detaliată a posibililor parametri de configurare ( config) vezi linkul.De exemplu, prin specificarea:
("config": ("optimize-autoloader": true))
forțați Composer să optimizeze harta de clasă după fiecare instalare sau actualizare a pachetului (sau cu alte cuvinte, de fiecare dată când este generat un fișier de încărcare automată a clasei). Acest lucru este puțin mai lent decât crearea încărcării automate implicite și încetinește pe măsură ce proiectul crește.
Un alt parametru util ar putea fi cache-files-maxsize. În proiectele mari (cum ar fi eZ Publish sau Symfony) memoria cache se poate umple destul de repede. Mărirea dimensiunii cache-ului va permite Composer să ruleze rapid pentru mai mult timp.
Vă rugăm să rețineți că parametrii de configurare pot fi setați global, caz în care vor afecta toate proiectele (vezi config). De exemplu, pentru a seta global parametrul dimensiunea memoriei cache, fie trebuie să editați fișierul ~/.composer/config.json, sau rulați:
Composer config --global cache-files-maxsize "2048MiB"
Profilare și rezultate detaliate (verboze)
Dacă adăugați parametrul --profil la orice comandă atunci când utilizați Composer pe linia de comandă, rezultatul va conține mai mult decât rezultatul final, de exemplu:Utilizare memorie: 174,58MB (vârf: 513,47MB), timp: 54,7s
Dar va adăuga, de asemenea, timpul de execuție a comenzii și dimensiunea memoriei utilizate la începutul fiecărei linii de ieșire:
Instalarea materialelor pentru Sensio\Bundle\DistributionBundle în web/bundle/sensiodistribution
Folosesc această opțiune pentru a identifica pachetele „lente” și pentru a monitoriza îmbunătățirea sau degradarea performanței pe .
Similar cu precedentul, parametrul --verbos va determina Composer să scoată mai multe informații despre fiecare operațiunea în curs de desfășurare, anunțându-vă că exact care se întâmplă în acest moment. Unii chiar instalează compozitor --verbose --profil alias de echipă compozitor implicit.
Surse utilizatori
Dacă proiectul tău nu este încă pe Packagist, uneori trebuie doar să instalezi un pachet din GitHub (de exemplu, dacă pachetul este încă în dezvoltare). Pentru a face acest lucru, consultați ghidul nostru.Când ai propriile sale versiunea unui pachet popular de care depinde proiectul dvs., puteți utiliza origini personalizate în combinație cu aliasing inline pentru a înlocui pachetul public cu propria ramură, cum ar fi Matthieu Napoli.
Accelerarea Compozitorului
Folosind o metodă excelentă descrisă de Mark Van Eijk, puteți accelera execuția Composer apelând-o prin HHVM.O altă modalitate este utilizarea parametrului --prefer-dist, când este instalat, Composer va descărca versiuni stabile, ambalate ale proiectului, în loc să cloneze din controlul versiunilor (care este mult mai lent). Această opțiune este utilizată în mod implicit, deci nu trebuie să o activați în proiecte stabile. Dacă trebuie să descărcați un proiect din surse, utilizați opțiunea --prefer-sursa. Puteți afla mai multe despre acest lucru în secțiune instala .
Reducerea dimensiunii proiectului Composer
Dacă sunteți un dezvoltator de proiecte Composer-friendly, această parte vă va interesa și. Conform acestei postări pe Reddit, puteți utiliza fișierul .gitattributes ignora unele fișiere și foldere atunci când împachetează un pachet pentru modul --prefer-dist./docs export-ignore /tests export-ignore /.gitattributes export-ignore /.gitignore export-ignore /.travis.yml export-ignore /phpunit.xml export-ignore
Cum funcţionează asta? Când încărcați un proiect în GitHub, acesta face automat disponibil linkul „Descărcați zip”, cu care poți descărca arhiva proiectului tău. Mai mult, Packagist folosește aceste arhive generate automat pentru a descărca dependențe cu opțiunea --prefer-dist, pe care apoi îl va dezarhiva local (mult mai rapid decât clonarea fișierelor sursă ale proiectului). Dacă adăugați la .gitattributes teste, documentatii si alte fisiere care nu au legatura cu logica proiectului, aceste arhive nu le vor contine, devenind mult mai usoare.
În același timp, oamenii care vreau pentru a vă depana biblioteca sau a rula teste, va trebui să specificați un parametru --prefer-sursa.
PhpLeague a adoptat această abordare și a inclus-o în ea "scheletul pachetului"(Schelet pachet), deci orice proiect bazat pe acesta va fi automat „prietenos”.
Spectacol
Dacă ați uitat brusc ce versiune de PHP sau extensiile sale utilizați sau aveți nevoie de o listă a tuturor proiectelor instalate (cu o descriere a fiecăruia) cu versiunile acestora, puteți utiliza comanda spectacol cu parametrii --platformă (-p) Și --instalat (-i):compozitor show --instalat
$ composer show --installed behat/behat v3.0.15 Cadru BDD orientat spre scenariu pentru PHP 5.3 behat/gherkin v4.3.0 Gherkin DSL parser pentru PHP 5.3 behat/mink v1.5.0 Cadru de testare a acceptării web pentru PHP 5.3 behat/mink-browserkit -driver v1.1.0 Driver Symfony2 BrowserKit pentru framework Mink behat/mink-extension v2.0.1 Extensie Mink pentru Behat behat/mink-goutte-driver v1.0.9 Driver Goutte pentru framework Mink behat/mink-sahi-driver v1.1.0 Sahi. Driver JS pentru framework Mink behat/mink-selenium2-driver v1.1.1 Driver Selenium2 (WebDriver) pentru framework Mink behat/sahi-client dev-master ce7bfa7 Client Sahi.js pentru PHP 5.3 Extensia framework Symfony2 behat/symfony2 v2.0.0 pentru Behat behat/transliterator v1.0.1 String transliterator componente/bootstrap 3.3.2 Cel mai popular cadru front-end pentru dezvoltarea proiectelor receptive, mobile first pe web. componente/jquery 2.1.3 jQuery JavaScript Library doctrine/adnotări v1.2.4 Docblock Annotations Parser doctrine/cache v1.4.1 Bibliotecă de stocare în cache care oferă un API orientat pe obiecte pentru multe backend-uri cache doctrine/colecții v1.3.0 Colecții Abstraction library doctrine/common v2. 5.0 Bibliotecă comună pentru proiecte Doctrine doctrine/dbal v2.5.1 Stratul de abstracție a bazei de date doctrine/doctrine-bundle v1.4.0 Symfony DoctrineBundle doctrine/doctrine-cache-bundle v1.0.1 Symfony2 Bundle pentru Doctrine Cache doctrine/manipulări v1 String0.1 referitor la majuscule și regulile singular/plural. doctrine/instantiator 1.0.4 Un utilitar mic, ușor pentru a instanția obiecte în PHP fără invocarea constructorilor lor doctrine/lexer v1.0.1 Bibliotecă de bază pentru un lexer care poate fi folosit în analizatoare de coborâre recursive de sus în jos. egulias/listeners-debug-command-bundle 1.9.1 Comandă din consola Symfony 2 pentru a depana ascultătorii ezsystems/behatbundle dev-master bd95e1b Pachetul Behat pentru ajutor la testarea pachetelor și proiectelor eZ ezsystems/comments-bundle dev-master 8f95bc7 Publicarea sistemului ezsystems eZc7 /demobundle dev-master c13fb0b Pachet demonstrativ pentru platforma eZ Publish ezsystems/demobundle-data v0.1.0 Date pentru ezsystems/demobundle ezsystems/ezpublish-kernel dev-master 3d6e48d eZ Publish API și kernel. Aceasta este inima eZ Publish 5. ezsystems/platform-ui-assets-bundle v0.5.0 Dependențe de active externe pentru PlatformUIBundle ezsystems/platform-ui-bundle dev-master 4d0442d eZ Platform UI Bundle ezsystems/privacy-cookie-bundle v0. 1 pachet de integrare banner cookie de confidențialitate în eZ Publish/eZ Platform fabpot/goutte v1. 0.7 Un simplu PHP Web Scraper friendsofsymfony/http-cache 1.3.1 Instrumente pentru gestionarea invalidării cache-ului friendsofsymfony/http-cache-bundle 1.2.1 Setați antetele cache HTTP bazate pe cale și trimiteți cereri de invalidare către cache-ul HTTP guzzle/guzzle v3.9.3 PHP Client HTTP. Această bibliotecă este depreciată în favoarea https://packagist.org/packages/guzzlehttp/guzzle hautelook/templated-uri-bundle 2.0.0 Symfony2 Bundle care oferă un router compatibil RFC-6570 și un generator de URL. hautelook/template-uri-router 2.0.1 Router compatibil Symfony2 RFC-6570 și generator de URL imagine/imagine 0.6.2 Procesarea imaginii pentru PHP 5.3 incenteev/composer-parameter-handler v2.1.0 Scriptul Composer care gestionează fișierul cu parametri ignorați instaclick/php -webdriver 1.0.17 PHP WebDriver pentru Selenium 2 jdorn/sql-formatter v1.2.17 o bibliotecă de evidențiere PHP SQL knplabs/knp-menu v1.1.2 O bibliotecă de meniu orientat pe obiecte knplabs/knp-menu-bundle v1.1.2 Acest pachet oferă un pachet integrarea bibliotecii KnpMenu kriswallsmith/asetic v1.2.1 Asset Management pentru PHP kriswallsmith/buzz v0.13 Ligă/flysystem de client HTTP ușor 0.5.12 Multe sisteme de fișiere, un singur API. liip/imagine-bundle 1.2.6 Acest pachet ajută la manipularea imaginii folosind monologul/monologul bibliotecii imagine 1.13.1 Trimite jurnalele dvs. către fișiere, socket-uri, căsuțe de intrare, baze de date și diverse servicii web nelmio/cors-bundle 1.3.3 Adaugă CORS ( Cross-Origin Resource Sharing) suport pentru anteturile în aplicația dvs. Symfony2 ocramius/proxy-manager 0.5.2 O bibliotecă care oferă utilități pentru a genera, instanția și, în general, opera cu Object Proxies oneup/flysystem-bundle v0.4.2 Integrează biblioteca de abstracție a sistemului de fișiere Flysystem în Symfony2. proiect. pagerfanta/pagerfanta v1.0.3 Paginare pentru PHP 5.3 phpdocumentor/reflection-docblock 2.0.4 phpspec/prophecy v1.4.1 Cadru batjocoritor cu opinie mare pentru PHP 5.3+ phpunit/php-code-coverage 2.0.16 Bibliotecă care oferă colectare, procesare și funcționalitate de redare pentru informațiile de acoperire a codului PHP. phpunit/php-file-iterator 1.4.0 Implementarea FilterIterator care filtrează fișierele pe baza unei liste de sufixe. phpunit/php-text-template 1.2.0 Motor simplu de șablon. phpunit/php-timer 1.0.5 Clasa de utilitate pentru cronometrarea phpunit/php-token-stream 1.4.1 Wrapper în jurul extensiei tokenizer PHP phpunit/phpunit 4.6.4 Cadrul de testare unitară PHP phpunit/phpunit-mock-objects 2.3 Biblioteca de obiecte simulate pentru PHPUnit psr/log 1.0.0 Interfață comună pentru bibliotecile de înregistrare qafoo/rmf 1.0.0 Cadru VC foarte simplu, care facilitează construirea de aplicații HTTP/servicii web REST sebastian/comparator 1. 1.1 Oferă funcționalitatea de comparare a valorilor PHP pentru egalitate sebastian/diff 1.3.0 Implementarea diff sebastian/mediu 1.2.2 Oferă funcționalitate pentru a gestiona mediile HHVM/PHP sebastian/exporter 1.2.0 Oferă funcționalitatea de a exporta variabile PHP pentru vizualizare sebastian /global -state 1.0.0 Instantanee a stării globale sebastian/recursion-context 1.0.0 Oferă funcționalitate pentru a procesa recursiv variabile PHP sebastian/version 1.0.5 Biblioteca care ajută la gestionarea numărului de versiuni al proiectelor PHP găzduite de Git sensio/distribution- bundle v3 .0.21 Pachet de bază pentru Symfony Distributions sensio/framework-extra-bundle v3.0.7 Acest pachet oferă o modalitate de a vă configura controlerele cu adnotări sensio/generator-bundle v2.5.3 Acest pachet generează cod pentru dvs. sensiolabs/security-checker v2 .0.2 Un verificator de securitate pentru compositorul dumneavoastră.lock swiftmailer/swiftmailer v5.4.0 Swiftmailer, mailer PHP gratuit, bogat în funcții, symfony-cmf/routing 1.3.0 Extinde componenta de rutare Symfony2 pentru rute dinamice și înlănțuire mai multe routere symfony/assettic-bundle v2 .6.1 Integrează Assetic în Symfony2 symfony/monolog-bundle v2.7.1 Symfony MonologBundle symfony/swiftmailer-bundle v2.3.8 Symfony SwiftmailerBundle symfony/symfony v2.6.6 Symfony/symfony v2.6.6 vă păstrează framework-ul Symfony ca. tedivm/stash-bundle v0.4.2 Încorporează biblioteca de cache Stash în Symfony. twig/extensions v1.2.0 Caracteristici suplimentare comune pentru Twig care nu aparțin direct twig/twig v1.18.1 Twig, limbajul șablon flexibil, rapid și sigur pentru PHP white-october/pagerfanta-bundle v1.0.2 Bundle de utilizat Pagerfanta cu Symfony2 whiteoctober/breadcrumbs-bundle 1.0.2 Un mic pachet breadcrumbs pentru Symfony2 zendframework/zend-code 2.2.10 oferă facilități pentru a genera cod arbitrar folosind o interfață orientată pe obiect zendframework/zend-eventmanager 2.2.10 zend-framework/zend-eventmanager .10 zetacomponents/base 1.9 Pachetul de bază oferă infrastructura de bază pe care se bazează toate pachetele. Prin urmare, fiecare componentă se bazează pe acest pachet. zetacomponents/feed 1.4 Această componentă se ocupă de analizarea și crearea fluxurilor RSS1, RSS2 și ATOM, cu suport pentru diferite module de feed (dc, content, creativeCommons, geo, iTunes). zetacomponents/mail 1.8.1 Componenta vă permite să construiți și/sau să analizați mesajele de e-mail conform standardului de e-mail. Are suport pentru atașamente, mesaje cu mai multe părți și e-mail HTML. De asemenea, interfață cu SMTP pentru a trimite e-mail sau IMAP, P. .. zetacomponents/system-information 1.1 Oferă acces la variabilele comune ale sistemului, cum ar fi tipul și viteza CPU și cantitatea de memorie disponibilă.
Repetiții (Dry Runs)
Pentru a vedea pur și simplu dacă instalarea de noi dependențe va reuși, puteți utiliza opțiunea --funcție uscată pentru echipe instalaŞi actualizare. Composer în acest caz va afișa toate problemele potențiale fără a executa direct comanda în sine. Nu vor exista modificări reale ale proiectului. Această tehnică este excelentă pentru a testa dependențe complexe și pentru a ajusta modificări înainte de a le face efectiv.Actualizare a compozitorului --dry-run --profile --verbose
Crearea unui proiect
Ultimul lucru pe care trebuie să-l menționăm este echipa crea-proiect.Comanda create project ia ca argument numele pachetului, pe care apoi îl clonează și îl execută instalarea compozitoruluiîn interiorul ei. Acest lucru este grozav pentru inițializarea proiectelor - nu mai căutați adresa URL a pachetului dorit pe GitHub, nu-l mai clonați, nu mai mergeți în folder și executați comanda instala.
Proiecte mari, cum ar fi Symfony și Laravel, folosesc deja această abordare pentru a-și inițializa aplicațiile „schelete”, iar multe altele se alătură și ele.
De exemplu, în Laravel este folosit astfel:
Composer create-project laravel/laravel --prefer-dist --profile --verbose
Pentru echipa crea-proiect Puteți trece încă doi parametri: cale, în care ar trebui să fie instalat proiectul (dacă nu este specificat, este folosit numele pachetului) și versiune(acesta din urmă va fi folosit dacă nu este specificat).
Concluzie
Sper că ați găsit utilă această listă de sfaturi și trucuri. Dacă am omis ceva, vă rugăm să ne spuneți despre asta și vom actualiza articolul. Și nu uitați, dacă ați uitat orice comandă sau opțiune, consultați foaia de cheat. Compune fericit!Salutare tuturor. Astăzi vom vorbi despre ce sunt managerii de pacheteși luați în considerare una dintre ele - compozitor.
Mai întâi, să ne dăm seama de ce avem nevoie managerii de pachete? Managerii de pachete vă ajută să descărcați toate pachetele, dependențele, unele cadre, pluginurile utilizate de limbajul de programare prin consolă în doar câteva rânduri. În cazul nostru compozitor- Asta manager de pachete pentru limbajul de programare php.
Pentru a vă arăta cum funcționează compozitorul, să descarcăm yii cadru
Deci, mergi pe site http://getcomposer.org/și apăsați butonul "Noțiuni de bază". Acum faceți clic Instalare - *nix pentru a-l instala Mac sau Linux. Deschideți un terminal și inserați următoarele comenzi:
1) $ curl -sS https://getcomposer.org/installer | php
2) $ mv composer.phar /usr/local/bin/composer
După ce ați terminat, introduceți comanda compozitorși, dacă aveți o inscripție mare "COMPOZITOR" si niste informatii, apoi ai facut totul corect si compozitor instalat cu succes.
Pentru a instala compozitor pe Windows, urmați linkul https://getcomposer.org/doc/00-intro.md#installation-windowsși descărcați programul de instalare. Dacă în timpul instalării primiți erori de bibliotecă, mergeți la fișier php.iniși dezactivați acele biblioteci care împiedică instalarea compozitor manager de pachete.
După compozitor instalat, accesați desktopul și creați un folder numit "compozitor". Acum, în consolă, accesați-l
Cd Desktop/compozitor/
Pentru a inițializa compozitorul, introduceți comanda
Compozitor init
Ce rost mai are? Ideea este că atunci când începeți un nou proiect, nu trebuie să urcați pe site-uri web și să descărcați tot ce aveți nevoie pentru el. Pur și simplu introduceți comanda în consolă și totul se descarcă automat. Un alt plus este că unele biblioteci depind de alte biblioteci, dar nu trebuie să vă mai faceți griji pentru acest lucru, deoarece compozitorul le va descărca și el. În proiectele mari, acest lucru este foarte convenabil în sensul că, dacă, de exemplu, sosește un nou angajat, nu trebuie să îi explicați ce să descărcați și de unde. Doar i-o dai json fișier, va introduce comanda în consolă și totul va fi instalat.
Să continuăm să instalăm cadrul nostru. După cum am mai spus, intrăm
Caută un pachet:
Introduceți aici numele cadrului nostru
Căutați un pachet: yii
Vei vedea în fața ta toate meciurile pe care le-ai găsit compozitor. Nevoia noastră yiisoft/yii Există un număr între paranteze drepte în stânga. În cazul meu este 0 , îl introduc și apăs pe enter. În continuare trebuie să introducem versiunea. De unde descarcă Composer toate acestea? Există un site unde sunt stocate o mulțime de lucruri - http://packagist.org/ Acolo intră în bara de căutare yii si urmati primul link, acolo veti vedea ca se numeste versiunea dev-master. Introduceți acest lucru în consolă și apăsați pe Enter.
Limitezi generația?
Deasupra acestei legende puteți vedea cum arată fișierul compozitor.json. Acesta este exact dosarul pe care îl vei da unui nou angajat.
Deci, suntem mulțumiți de tot, apăsați enter.
Acum, dacă accesați folderul nostru de pe desktop compozitor, atunci vei vedea că acolo a apărut al nostru json fişier.
Acum introduceți comanda în consolă
Instalarea compozitorului
După finalizarea instalării, un nou folder numit vânzător, unde sunt stocate toate fișierele cadrului nostru.
Este atât de ușor de lucrat manager de pachete compozitorși, cel mai important, acum nu trebuie să descărcați totul manual. Este suficient să o faci o dată json fișier și apoi pur și simplu folosiți-l pentru a descărca și instala cadrul, pluginurile, bibliotecile și alte lucruri de care aveți nevoie.
Am scris despre cum să-ți creezi propriul autoloader de clasă în php. Dar puteți încărca automat clase pentru proiectul dvs. folosind managerul de dependențe pentru PHP - Compozitor. Acest lucru este valabil mai ales dacă proiectul este suficient de mare și intenționați să utilizați Composer ca instalare de biblioteci terță parte (dependențe).
Pentru a vă introduce datele în fișierele de încărcare automată Composer, trebuie să faceți modificări fișierului compozitor.json, iar dacă nu este încă în rădăcina aplicației, creați-o.
Crearea se realizează prin executarea pe linia de comandă, de exemplu în consola OpenServera:
compozitor init
Înainte de a face acest lucru, trebuie să mergeți la directorul rădăcină al aplicației.
Dacă Composer nu este instalat global, atunci compozitor
trebuie sa scriu php composer.phar.
În acest caz, vi se va solicita să introduceți date despre numele proiectului, autorul și vi se va solicita să introduceți imediat dependențele necesare. Aceste date nu sunt legate de încărcarea automată a clasei. În principiu, în general, puteți crea singur fișierul composer.json și plasați acolo doar obiectul între acolade încărcare automată:
( „încărcare automată”: ( „psr-4”: ( „Servicii\\”: „servicii”, „Aplicație\\”: „aplicație” ) ) )
Dacă creați acest fișier utilizând comanda compozitor init sau folosiți un fișier care există deja (dacă nu există un obiect de încărcare automată), atunci trebuie să puneți o virgulă după ultimul element (dar înainte de ultima acoladă) și să introduceți blocul de încărcare automată .
Conform exemplului, pentru un spațiu de nume care începe cu Servicii ar trebui conectat un folder cu numele servicii, situat la rădăcina aplicației. Este la fel și cu aplicația.
Aceasta este, de exemplu, clasa Servicii\Aplicație trebuie să fie în folder servicii/Aplicație.php, apoi Composer îl va conecta automat.
Secțiunea de încărcare automată poate include și alte subsecțiuni: hartă de clasă, fișiere.
Subsecțiunea hartă de clasă este responsabil pentru descrierea claselor a căror denumire nu este conformă cu standardul PSR-4. Adică, în harta clasei indicăm pur și simplu unde să căutăm anumite clase. De exemplu:
"classmap": [ "services/myserv/", "services/myserv/Ksl.php" ]
Aici, primul element al matricei classmap indică directorul în care să căutați fișierele de clasă necesare. În același timp, nu specificăm numele clasei.
Al doilea element arată un exemplu de specificare a unui anumit fișier de clasă, astfel încât Composer să nu fie nevoit să caute în folder servicii/myserv altceva. Desigur, merită să prescrii fie prima, fie a doua opțiune.
Subsecțiunea fișiere este responsabil pentru descrierea fișierelor pe care trebuie să le includem chiar la începutul execuției aplicației. De exemplu, acestea sunt setările aplicației - config.php. În loc să-l conectezi la index.php:
require_once "../config.php";
puteți specifica că Composer îl conectează: "fișiere": [ "config.php" ] în acest caz fișierul va fi conectat config.php
situat în rădăcina aplicației (în același loc cu fișierul composer.json unde îl scriem). Puteți conecta orice fișier specificând calea către acesta. încărcare automată Adică structura blocului
poate include diferite componente:
"autoload": ( "classmap": [ "services/myserv/Ksl.php" ], "psr-4": ( "Services\\": "servicii", "liw\\": "" ), "fișiere ": [ "config.php" ] )
După ce ați introdus codul necesar în obiectul de încărcare automată, salvați modificările și apoi trebuie să actualizați fișierele de încărcare automată Composer. Dacă ați creat singur fișierul composer.json înainte, atunci nu există deloc fișiere de încărcare automată. Pentru a le face să apară, fugi Composer install va crea un folder de furnizor și în acesta un folder de compozitor cu fișiere de pornire. Acolo va fi un dosar autoload_psr4.php în care regulile noastre de căutare a clasei sunt rescrise conform standardului psr-4
și fișiere similare pentru hărți și fișiere de clasă.
Dacă folderul furnizorului cu aceste fișiere exista deja și trebuie să modificați datele pentru a vă conecta clasele, atunci trebuie să rulați comanda:
composer dump-autoload -o care va actualiza fișierele de încărcare automată Composer și nu va instala sau actualiza dependențe (biblioteci specificate în blocul require). Folosind cheia după comanda "-o
”, care înseamnă „optimizează”, clasele care respectă standardul psr-4 și sunt înregistrate pentru un anumit obiect vor fi înregistrate în harta clasei, ceea ce va grăbi încărcarea lor în viitor. De asemenea, în folderul furnizor există un fișierîncărcare automată.php , care trebuie conectat pentru ca încărcarea automată să funcționeze. De obicei, este inclus în fișierul „punctul de intrare”.:
index.php
În această postare voi vorbi despre impresiile mele personale de a folosi un lucru atât de interesant precum . Dacă cineva nu știe, acesta este un manager de dependență pentru bibliotecile PHP care facilitează instalarea, actualizarea și suportul diferitelor biblioteci în proiectul dvs. Un programator are nevoie de o infrastructură pentru a funcționa confortabil (vă spun asta cu siguranță:- ). Aceasta include un scaun confortabil, o mașină puternică cu două monitoare și un IDE modern, instrumente pentru baze de date și instrumente de depanare. Dar, în plus, infrastructura de dezvoltare a proiectului în sine este importantă.
Să luăm Ruby de exemplu. Acest limbaj, la naiba, este doar un trendsetter în domeniul dezvoltării web. Există instrumente convenabile de schele (ei bine, ZF are și asta) și lucruri precum grebla pentru îndeplinirea sarcinilor. Nici măcar nu vorbesc despre migrații, teste unitare cu tot felul de obiecte simulate. Când făceam coduri în Ruby, senzația era asemănătoare cu a sta într-un scaun confortabil de la clasa business într-un avion și singura ta problemă era să alegi o băutură care să se potrivească dispoziției tale.
Glumesc, glumesc. Nu totul este atât de roz în Ruby. Există o mulțime de pietre strâmbe, dezvoltatorii lansează uneori un astfel de miracol încât mama nu plânge. Nu vorbesc despre șamanism de nivel scăzut atunci când trebuie să creați ceva de genul unui sistem distribuit sau cu mai multe fire. Dar această postare nu va fi despre asta. Și despre faptul că în Ruby există așa ceva ca RubyGems.
RubyGems este un sistem de gestionare a dependențelor într-un proiect Ruby. În special, există un astfel de lucru precum Bundler, care instalează pachetele necesare sau le actualizează cu un singur clic. De la el a fost copiat în mod flagrant și a servit drept inspirație pentru Composer.
Ce poate face Composer
Deci, o scurtă prezentare generală a caracteristicilor. Există doar două dintre ele: managementul pachetelor și încărcarea automată a clasei. Trebuie să spun că fără compozitor, ambele sarcini au durat destul de mult timp. Internetul este încă plin de articole în stilul „cum se conectează ZF 1.x și Doctrine 2” sau „cum se instalează Doctrine 2 ODM și Doctrine 1 ORM”. Perversiune, zici tu. Am exagerat intenționat, dar trebuie să recunoașteți, trebuie să vă dați multă bătaie de cap pentru a încrucișa niște cadre sau biblioteci. Odată cu lansarea lui Composer, situația s-a schimbat.
Mulțumiri speciale trebuie spuse pentru încărcarea automată umană. Uau, cât timp am petrecut cândva integrând Zend_Loader_Autoloader și Doctrine/ClassLoader. Este un lucru din trecut acum. Să stăm pe un scaun
Exemplu composer.json
Iată un exemplu de fișier de dependență dintr-un proiect.
( „require”: ( „doctrine/common”: „2.3.0”, „doctrine/migrations”: „dev-master”, „doctrine/dbal”: „2.3.0”, „doctrine/orm”: „2.3 .0", "doctrine/mongodb": "1.0.x-dev", "doctrine/mongodb-odm": "1.0.x-dev", "simukti/zf1": "1.12.0", "zendframework/zendframework" ": "2.0.3" ), "încărcare automată": ( "psr-0": ( "ZendExtra": "vendor/netandreus/zend-extra/lib/", "DoctrineExtra": "vendor/netandreus/doctrine-extra /lib/", "MyProject": "furnizor/myvendor/myproject/lib/", "Hydrators": "diverse/cache/", "": "app/default/models/" ) )
Așa că haideți să trecem prin el rând cu rând. În blocul require, descriem numele pachetelor sub forma vendorName/packageName și versiunile minime necesare pentru proiectul nostru. Apoi vor fi descărcate și instalate în folderul furnizor. După cum puteți vedea, Doctrina, de exemplu, a fost ambalată în mai multe pachete simultan. Apropo, migrațiile au fost lansate într-un pachet separat destul de recent, așa că rămâneți la curent cu noutățile despre proiect. Îi exprim profunda recunoștință față de tovarășul Simukti pentru portarea celor mai recente versiuni ale ZF 1.x către compozitor. Când am avut nevoie la un moment dat, am început să o fac... dar nu am avut niciodată timp din cauza altor sarcini. Acum, în cadrul unui singur proiect, avem posibilitatea de a folosi componentele Doctrine 2 ODM + ORM + ZF 1.x + ZF 2.x. Vinaigretă nebună, dar avem nevoie de ea. Deoarece Migrem încet de la MySQL (fie ca Michail Widenius să mă ierte) la MongoDB. Coloana vertebrală principală este pe ZF1, dar nici ZF2 nu este din curiozitate inactivă /* intriga */.
Acum este necesară a doua parte a configurației. Aici specificăm clasele (sau mai degrabă spațiile lor de nume) și locațiile lor de stocare, i.e. rezolvăm căile pentru spațiile de nume corespunzătoare. Vă rugăm să rețineți câteva lucruri. Pentru hidratanții de doctrină (dacă nu știi ce este asta, poți sări peste el) indicăm căile, pentru că. cu doctrina autoloader lipsă, nu le găsește. Ultima linie este locația coșului de gunoi, unde pot fi stocate clase cu orice spațiu de nume. Caracteristica principală a Composer este că poate exista (din fericire) doar o astfel de descărcare. Dar în proiectul nostru, clasele necesare au venit de nicăieri, așa că a trebuit să facem o colectare a gunoiului, ca să spunem așa, și să aruncăm totul într-un singur morman. Desigur, într-o zi va trebui să-l demontăm, dar acum cel puțin tot gunoiul este într-un singur loc. Ei bine, ZendExtra și DoctrineExtra sunt extensiile mele, pe care le-am descris parțial în postările mele.
Erori ale compozitorului
Ei bine, unde fără bug-uri. Poate cel mai remarcabil bug. Când tu, încrezător că totul este în regulă, faci update la php composer.phar, vei fi... dezamăgit. Problema este că compozitorul nu descarcă sursele (sau mai bine zis, nu le actualizează) dacă este specificată ramura dev, iar sursele sunt mai vechi de 6 luni. Din păcate, în composer.json meu, acestea erau pachete cu doctrină. Solutia este simpla, inainte de a face un update scoatem pachetele cu doctrina.
Al doilea bug a fost că depozitele unor pachete conțin un fișier .gitignore, care este descărcat în timpul actualizării/instalării. Și dacă apoi comiteți codul sursă al proiectului (împreună cu acest pachet), atunci acesta nu va ajunge. De exemplu, în asamblare, cu care lucrez, apare un fișier gol în locul unui folder cu surse. În același timp, commit și push procedează normal, dar comercianții se plâng că nu le ajunge nimic. Soluția este simplă, după Update ștergem fișierele .gitignore din fișierele sursă cu pachete.
Ar trebui să folosesc Composer sau nu?
Da! După cum a spus cineva, biblioteca dvs. este nasol dacă nu are un fișier composer.json la rădăcină. Să nu mai producem cod de rahat, să ne conformăm standardelor (bine, cel puțin psr-0) și să scriem cod cu chip uman, ca să spunem așa. Sunt cu toții pentru unificare și standardizare! Bucurați-vă!