Mis on helilooja php. Composeri for Dummies installimine (kohandamine ja põhikäsud)

) on suhteliselt uus ja juba populaarne PHP sõltuvushaldur. Saate kirjeldada, millistest raamatukogudest teie projekt sõltub ja Composer installib teie jaoks vajalikud teegid! Pealegi pole Composer klassikalises mõttes paketihaldur. Jah, see töötab olemitega, mida me nimetame "pakettideks" või teekideks, kuid need installitakse iga projekti sisse eraldi, mitte globaalselt (see on üks peamisi erinevusi vanast heast PEARist).

Lühidalt, kuidas see töötab:

  1. Teil on projekt, mis sõltub mitmest raamatukogust.
  2. Mõned neist raamatukogudest sõltuvad teistest raamatukogudest.
  3. Kirjeldate oma projektis neid teeke, millest teie kood otseselt sõltub.
  4. Composer leiab kogu projekti jaoks vajalike teekide õiged versioonid, laadib need alla ja installib need teie projekti kausta.
Heliloojat luues ammutasid autorid ideid ja inspiratsiooni sarnased projektid: npm Node.js jaoks ja Bundler Ruby jaoks.

Algselt kujundasid ja arendasid seda kaks inimest Nils Adermann ja Jordi Boggiano, nüüd on projektis rohkem kui kakskümmend panustajat. Projekt on kirjutatud PHP 5.3-s, litsentsitud MIT-i litsentsi alusel ja saadaval githubis.

Esimesed kohustused tehti 2011. aasta aprillis ja praegu on Composer "alpha3" faasis. Kuid see on juba üsna stabiilne ja seda kasutavad paljud populaarsed PHP projektid (näiteks Symfony 2). Composerit kasutavate projektide loendi leiate saidilt packagist.org – see on ametlik Composeri pakettide hoidla. Muide, hiljutisel konverentsil Devconf 2012 mainis Yii raamistiku arendaja oma kõnes, et Yii2 tõenäoliselt kasutab ka Composerit.

Selles artiklis kirjeldan lühidalt Composeri põhifunktsioone ja proovime koostada demoprojekti, kasutades Composerit vajalike teekide laadimiseks. Kõik näited on saadaval veebisaitidel github.com ja bitbucket.org.

Mida saab helilooja teha?

  • Laadige alla paketid ja nende sõltuvused;
  • vaikimisi laaditakse paketid alla ametlikust packagist.org-i hoidlast. Igaüks võib sinna oma paketi vabalt lisada, et selle paigaldamine oleks kogu maailmale võimalikult lihtne ja mugav;
  • pakette saab alla laadida mitte ainult saidilt packagist.org, vaid ka igast git, mercurial või svn hoidlast;
  • pakettide allalaadimisel saidilt github.com või bitbucket.org pole versioonikontrollisüsteemi (git või hg) vaja, Composer töötab nende saitide API kaudu;
  • git / hg / svn hoidla koos paketiga võib asuda mitte ainult ühel ülaltoodud saitidest, vaid mis tahes muus kohas, näiteks kohalik võrk ettevõttes või üldiselt kohalikul kõvakettal;
  • lisaks ei pea installitud teek olema Composeri paketi kujul, saate installida mis tahes suvalise struktuuriga git / hg / svn hoidlast;
  • Lõpuks ei pea installitav pakett olema git / hg / svn hoidla, see võib olla suvaline ZIP-fail, millele pääseb juurde mis tahes uri!
  • kõik paketid installitakse praegusesse kataloogi (kust installikäsk väljastati), see võimaldab teil olla mitu erinevad versioonid raamatukogud paralleelselt erinevate projektidega töötamisel;
  • update käsk värskendab kõik installitud (või kogemata eemaldatud) paketid uusimateks versioonideks. Või ei pruugi see versioone uusimatele värskendada, kui loote spetsiaalse faili composer.lock - see võimaldab teil parandada kõigi projektis kasutatavate teekide stabiilsete versioonide kombinatsiooni;
  • peale pakettide paigaldamist genereeritakse automaatselt autoload.php, millega saad oma projekti koodis installeeritud teegid ühendada. Composeri paketi ettevalmistamisel on soovitatav kasutada PSR-0 - php-failide asukoha ja nimetamise standardit, et automaatne laadimine saaks need hõlpsalt üles leida. Igal juhul saab paketi autor kirjeldada reegleid, mille järgi automaatne laadimine teatud klasside või nimeruumide faile otsib. Kui installite teeki, mis ei ole raamitud Composeri paketina (näiteks githubi suvaline git-hoidla), langeb automaatse laadimise reeglite kirjeldamise ülesanne teie õlgadele. Seega pole genereeritud autoload.php-ga mingit maagiat - sellega saab laadida kõike (isegi klassivälise funktsioonikomplektiga teeke), peaasi, et reeglid on kirjeldatud (teegi autori või teie poolt).

Töönäide: helilooja kasutamine meie projektis

Et aru saada, kuidas Composerit kasutada, kirjutame PHP-s väikese projekti: “Super Hello World.” Kuna me ei taha ratast uuesti leiutada ja nullist koodi kirjutada, võtame ette valmis teegid ja raamistikud.

Kasutame järgmisi teeke:

  1. Silex mikrokarkass
  2. Twig mallimootor (saadaval Composeri paketina saidil packagist.org),
  3. meie oma SuperLoggeri külastuste logija, mille kujundasin Composeri paketina ja avaldasin githubis
  4. meie vana, kuid armastatud pärandteek superlib, mis koosneb klassidest ilma nimeruumideta ja funktsioonidest ilma klassideta; teek on avaldatud githubis, kuid see ei ole stiiliga helilooja pakett
Nagu tegime ka varem: laadisime alla vajalikud raamistikud ja teegid, mõtlesime, kust need lahti pakkida, kirjutasime projekti hunniku nõudeid (või usaldusväärsuse tagamiseks nõue_üks kord).

Kuidas me seda nüüd teeme: kasutame Composerit – see laadib alla kõik teegid ja genereerib meie jaoks faili autoload.php. Lisaks, kui tahame "Super Hello World" kolleegidele näidata, piisab sellest, kui avaldame oma projekti koodi githubis (või kusagil mujal), ilma kõiki vajalikke teeke hoidlasse kaasamata ja pikka juhendit koostamata. kuidas neid paigaldada. Piisab, kui meie kolleegid laadivad alla (kloonivad) "Super Hello World" ja täidavad käsu
php composer.phar install
Helilooja levitatakse ühe failina helilooja.phar(phar on php arhiiv) – tegelikult on see PHP skript, mis suudab vastu võtta mitmeid käske (install, update, ...) ning saab alla laadida ja lahti pakkida teeke.

Muide, natuke käivitamise süntaksist.
Kui töötate Windowsi all, siis tõenäoliselt kirjutate midagi sellist
php C: \ tee \ faili \ composer.phar install
Saate oma elu lihtsamaks teha, kui loote faili composer.bat ja lisate selle % PATH%.

Linuxis ja OS X-is saate konfigureerida käsu nagu
helilooja installimine

helilooja.json
Niisiis, oleme valmis oma Super Hello World projekti kirjutama. Ja ma just kirjutasin selle: http://github.com/pqr/superhelloworld. Kood koosneb ühest failist index.php veebikataloogis ja mallist layout.twig vaadete kataloogis.

Kõik pea on fail helilooja.json... See peaks asuma projekti juurtes, meie puhul veebi- ja vaatamiskataloogide kõrval. Selles failis on vaja märkida, millistest raamatukogudest meie projekt sõltub. Lisaks, kui need teegid pole vormindatud Composeri pakettidena, peate mõned määrama Lisainformatsioon installitava teegi kohta (näiteks kirjeldage autoload.php klasside ja funktsioonide automaatse laadimise reegleid).

Arvasite ära, et Composer.json on JSON-i andmevormingus. küsimusele" miks just JSON?"Helilooja arendajad vastavad" Sest. Lihtsalt nõustu sellega.".

Peame kirjeldama ühte js-i objekti, mis sisaldab kõiki juhiseid. Esimene ja kõige rohkem peamine juhend: nõuda.

Ühendame paketid saidilt packagist.org
("require": ("php": "> = 5.3.0", "silex / silex": "dev-master", "twig / twig": "> = 1.8,<2.0-dev" } }
Siin kirjeldasin projekti sõltuvust PHP versioonist 5.3.0 ja uuematest, silexist (mikroraamistik) ja twigist (mallimootor). Silex ja Twig on saadaval Composeri pakettidena saidil packagist.org, seega pole lisakonfiguratsiooni vaja. Pane tähele, et Silex omakorda sõltub veel mitmest paketist – need kõik laaditakse alla ja installitakse automaatselt.

Paketi nimi koosneb kahest kaldkriipsuga eraldatud osast: Tarnija nimi(müüja nimi) ja raamatukogu nimi... Tarnija nimi on sageli autori hüüdnimi või ettevõtte nimi. Mõnikord on pakkuja nimi sama, mis teegi või raamistiku enda nimi.

Lisage iga paketi jaoks kindlasti versiooninumber. See võib olla hoidlas asuv haru, näiteks "dev-master" - dev-eesliide annab märku, et see on haru nimi, ja haru ennast nimetatakse vastavalt "master". Elavhõbedahoidla puhul näeks sarnane kirje välja nagu "dev-default". Võrdlusoperaatorite abil saate versiooninumbrina määrata ka keerukamad reeglid. Muide, kui laadite koodi alla kaughoidlast, kontrollib Composer selles hoidlas olevaid silte ja harude nimesid, et leida midagi sarnast versiooninumbritele, näiteks kasutatakse versiooni 1.2 viitena silti "v1.2.3". .3.

Ühendame oma Compsoeri paketiga
Järgmiseks ühendame oma SuperLoggeri paketi, mis on õigesti vormindatud, kuid avaldatud mitte saidil packagist.org, vaid githubis:
("require": ("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" } ] }
Et anda Composerile teada, kust otsida paketti "minuettevõte / superlogija", lisasime massiivi hoidlad lingiga vastava Githubi hoidla juurde. Pange tähele, et hoidlate massiivi kirjed ei ole otseselt nõutava plokiga seotud – pakettide ja hoidlate vahel pole vastavust määratud. Minu arusaamist mööda otsib Composer kõik vajalikud paketid kõigist määratud hoidlatest (kaasa arvatud packagist.org veebilehel) ja laeb leitud vasted vastavalt mõnele sisemisele prioriteedile alla. Sügavamalt, ma pole sellest hetkest veel aru saanud, parandage mind, kui keegi teab üksikasju.
Suvalise Git-hoidla ühendamine
Nüüd lisame meie superlib pärandteegi, mis asub githubis, kuid ei ole vormindatud helilooja pakett, kuna ta on väga vana.
("require" :( "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"] } } } ] }
Hoidlate massiivi on lisatud objekt, mis kirjeldab täielikult paketti pqr / superlib. Tegelikult peaks see kirjeldus, mille raamatukogu autor peaks tegema ja oma hoidlasse panema. Kuid probleemi tingimuste kohaselt ei ole superlib kaunistatud helilooja pakett, seega pidime selle kirjelduse koostama projekti Super Hello World raames. Samamoodi saate ühendada mis tahes muu raamatukogu, sh. lihtne zip-fail.
Ühendame lihtsa ZIP-faili
Näiteks võib svn-i allikatega ZIP-failina levitatava Smarty mallimootori sõltuvuse kirjeldus välja näha järgmine:
("hoidlad": [("tüüp": "pakett", "pakett" :( "nimi": "smarty / smarty", "version": "3.1.7", "dist" :( "url": " http://www.smarty.net/files/Smarty-3.1.7.zip "," tippige ":" zip ")," allikas ":(" url ":" http: //smarty-php.googlecode. com / svn / "," tippige ":" svn "," viidake ":" sildid / Smarty_3_1_7 / distributsioon / ")))]," nõua ":(" smarty / smarty ":" 3.1. * "))
Automaatse laadimise juhised
Tuleme tagasi oma projekti juurde.
"pqr / superlib" kirjeldamisel lisasime juhise automaatne laadimine... See sisaldab faili timer.php, milles tulevane autoloader otsib klasse ja määrab faili lib_functions.php funktsioonidega – see lisatakse sunniviisiliselt autoload.php algusesse.

Niisiis, meie projekt koosneb:

  • juurtes on fail composer.json;
  • juurtes on veebi- ja vaatekataloogid;
  • veebikataloogi sees on fail meie rakenduse "äriloogikaga": index.php;
  • vaadete kataloogis on mallifail layout.twig;
  • lisaks panin veebikausta .htaccess (apache jaoks) ja web.config (IIS 7.5 jaoks) koos mod_rewrite / url rewriter reeglitega - neil pole helilooja konfiguratsiooniga mingit pistmist.
Kõik on käivitamiseks valmis.
Käivitage helilooja installimine
php composer.phar install
Helilooja kloonib hoidlad ja pakib need soovitud versiooni juures lahti kataloogi müüja mille ta ise loob projekti juurtes. Pärast lahtipakkimist leiame tarnija kataloogist:
  • autoload.php faili
  • teeninduskataloogid .helilooja ja helilooja
  • vistrik - pakett, mis tõmmati koos Silexi mikroraamiga üles
  • Silex on mikroraamistik ise, me nõudsime seda sõltuvuste kirjeldamisel
  • symfony – mõned Symfony 2 komponendid, mis on vajalikud Silexi töötamiseks
  • twig on mallimootor, mida me ka selgesõnaliselt taotlesime
  • mycompany – selle kataloogi sees on githubist alla laaditud superloggeri hoidla
  • pqr - selle kataloogi sees on superlib-hoidla, mis on samuti alla laaditud githubist
Jääb vaid lisada veebi / index.php faili algusesse autoload.php (nõutav "../vendor/autoload.php") ja kõik teegid ja funktsioonid on saadaval!
Kuidas luua oma Composeri paketti?
Selles projektis oleme kasutanud Composerit raamatukogu tarbija vaatenurgast. Kuidas luua ise pakett Composer, et keegi teine ​​saaks seda kasutada?

Tegelikult lõin ühe neist pakettidest, kui valmistasin selle artikli näiteid ette. Superloggeri hoidla juurtes on sarnase struktuuriga fail composer.json, mis kirjeldab paketti ennast ja selle sõltuvusi (superloggeri puhul sõltuvusi pole). Teised näited: silex ja twig reposid, mis laaditakse alla hankija kausta – nende kõigi juurtes on fail composer.json – vaata, uuri!

Ja muidugi ärge unustage dokumentatsiooni ametlikul saidil getcomposer.org/doc/.
Selle teema jätan teile omaette uurimiseks.

Teeme kokkuvõtte

Selles artiklis selgitasin, mis on Composer, selle ajalugu ja kirjeldasin põhifunktsioone. Püüdsime luua projekti, mis kasutab Composerit pakettide installimiseks saidilt packagist.org ja meie enda hoidlatest.

On aeg seda proovida!

  1. Laadige alla helilooja (getcomposer.org/download/)
  2. Laadige alla superhelloworld (git kloon git: //github.com/pqr/superhelloworld.git)
  3. Installi sõltuvused (cd superhelloworld && php composer.phar install)
  4. Uurige kuvatavat hankija kausta ja loodud faili autoload.php
  5. Kasutage oma projektides Composerit
  6. KASUM!!!

Paar linki lisada

Composer - PHP sõltuvushaldur (Dependency Manager for PHP) või paketihaldur (sõltuvused on paketid - loogiliselt täielikud kolmanda osapoole või enda arendused, mida projektis kasutatakse).

Parem paigaldada globaalselt. OSX-i jaoks terminalis sisestage

Curl -sS https://getcomposer.org/installer | php mv composer.phar / usr / local / bin / helilooja

Helilooja

Kui kõik on õige, näete käskude loendit. Nii et saate kasutada heliloojat.

1. Kuidas luua heliloojas uut projekti?

Helilooja salvestab kõik sõltuvused faili composer.json küsimusele "miks JSON?" Helilooja arendajad vastavad "Sest. Lihtsalt aktsepteerige seda."

Selle faili saate luua käsuga

Helilooja init (või php composer.phar init)

Helilooja juhendab teid läbi mitme sammu – projekti nimi, kirjeldus, litsents. Teie jaoks on oluline samm, kus helilooja palub teil määrata installitava paketi. See palub teil otsida paketti, kuhu sisestate näiteks "yii" ja otsing soovitab kõiki pakette yii jaoks, mis on saadaval saidil packagist.org. Kui valite vajaliku helilooja, luuakse teie projektikausta fail composer.json koos kõigi kirjeldatud sõltuvustega.

Nüüd jääb vaid need installida käsuga:

Helilooja installimine

Kõik. Nüüd on teie projekti ilmunud kõik, mida soovite alla laadida.

2. Kuidas koostada komponisti vahendusel projekt valmispaketist?

Seda tehakse käsuga create-projekt ("Loo uus projekt paketist antud kataloogi.") Kaustas, kuhu soovite projekti kausta luua.

Näiteks võtame yii2 rakenduse täiustatud tünnipaketi (https://packagist.org/packages/yiisoft/yii2-app-advanced). See pakett laaditi üles saidile packagist.org.

Helilooja projekti loomise yiisoft / yii2-rakenduse täiustatud versioon yii2advanced 2.0.0-beeta

yii2advanced - määrake oma projekti nimi (arvuti kaustad)
2.0.0-beeta versioon (vaadake, millised versioonid on saidil packagist.org)

Pärast seda käsku laadib helilooja paketi alla ja installib sellesse kõik sõltuvused (te ei pea otsima vajalikke laiendusi erinevatelt saitidelt - helilooja leiab need ise).

3. Värskendage paketti.

Meeskond

(Värskendab teie sõltuvusi uusimale versioonile vastavalt composer.jsonile ja värskendab faili composer.lock.) - värskendab kõik installitud (või installib kogemata kustutatud) paketid uusimatele versioonidele. Või ei pruugi see versioone uusimatele värskendada, kui loote spetsiaalse faili composer.lock - see võimaldab teil parandada kõigi projektis kasutatavate teekide stabiilsete versioonide kombinatsiooni;

Joonisel minu värskendust ei toimu, kuna kõik sõltuvused on ajakohased.

Composer on muutnud PHP-s paketihalduse ja aidanud arendajatel üle maailma luua raamistiku agnostilist ja jagatud koodi. Kuid sellegipoolest lähevad vähesed inimesed selle funktsionaalsuse põhitõdedest kaugemale, nii et see artikkel püüab esile tuua mõned kasulikud tehnikad selle kasutamiseks.

Globaalne installimine (ülemaailmne)

Kuigi see suvand on dokumentatsioonis saadaval, saab Composeri (ja enamikul juhtudel peaks) installima globaalselt. Globaalne installimine tähendab, et selle asemel, et:

Php composer.phar somecommand
Saate lihtsalt siseneda mis tahes projekti:

Helilooja mingi käsk
See muudab uute projektide loomise väga lihtsaks (näiteks kasutades käsku loo-projekt) kõikjal teie failisüsteemis.

Composeri globaalseks installimiseks järgige neid juhiseid.

Sõltuvuste õige installimine

Sissejuhatavaid juhiseid või README-faile lugedes kirjutavad paljud teile midagi sellist:
Lihtsalt lisage oma failile composer.json järgmine fail faili:
("nõua": ("minuprojekt": "mingi versioon"))

Kuid sellel lähenemisviisil on mitmeid puudusi. Esiteks võib lihtne kopeerimine ja kleepimine põhjustada vigu. Teiseks ei pruugi algajale olla selge, kuhu see kood paigutada, kui tal on juba ulatuslik fail helilooja.json ja see toob kaasa ka vea. Lõpuks kasutavad mõned inimesed Composerit esimest korda ja võib-olla esimest korda kohtavad nad käsurida. Seetõttu on hea tava käsitleda kõikvõimalikke juhtumeid, mille puhul algajad võivad end ebakindlalt tunda (kas neil on graafikaredaktor või nad kasutavad käsurida? Kui viimast, siis kas tekstiredaktor on installitud ja kui on, siis milline ? json faili redigeerimise protseduur, aga mis siis, kui faili composer.json projektis veel ei ole? Kas kirjeldate ka, kuidas uut faili luua?).

Parim viis failile uue sõltuvuse lisamiseks helilooja.json on kasutada käsku nõuda:

Helilooja nõuab mingit paketti / mõni pakett: mõni versioon
See lisab kõik, mida vajate, sõltuvuste faili ilma käsitsi sekkumiseta.

Kui teil on vaja sektsiooni pakette lisada nõuda-dev, lisage käsule suvand --dev:

Helilooja nõuab phpunit / phpunit --dev
Samuti käsk nõuda toetab mitme paketi samaaegset lisamist, eraldage need lihtsalt tühikuga.

Lukusta failid

Fail helilooja.lukk hoiab installitud sõltuvuste ja nende versioonide praegust loendit. Seega ajal, mil sõltuvuste versioone on juba värskendatud, saavad teised inimesed, kes teie projekti kloonivad, samad versioonid. See tagab, et kõigil, kes teie projekti saavad, on "pakikeskkond", mis on identne sellega, mida kasutasite arenduse ajal, ja aitab vältida vigu, mis võivad tekkida versiooniuuendustest.

Samuti fail helilooja.lukk sisaldab faili räsi helilooja.json, nii et isegi kui värskendate lihtsalt projekti autori andmeid, saate hoiatuse, et lukustusfail ei ühti .json faili. Sel juhul aitab käsk helilooja värskendus --lock mis värskendab ainult lukufaili ennast, ilma midagi muud puudutamata.

Versioonide koostamine

Täpne vaste ( 1.2.3 ), vahemikud võrdlustehtetega ( <1.2.3 ), nende operaatorite kombinatsioonid ( >1.2.3 <1.3 ), "Viimati saadaval" ( 1.2.* ), tilde ( ~1.2.3 ) ja hoop ( ^1.2.3 ).

Kaks viimast näitajat väärivad eraldi selgitust:

  • tilde tähis ( ~1.2.3 ) sisaldab kõiki varasemaid versioone 1.3 (ei kaasa arvatud), kuna semantilises versioonis on käes hetk uute funktsioonide kasutuselevõtuks. Sel juhul saadakse viimane stabiilne kõrvalversioon. Nagu dokumentatsioon ütleb, võib see näit muutuda ainult versiooni viimane number.
  • tähise täpsustamine ( ^1.2.3 ) tähendab sõna-sõnalt "kartma ainult muudatusi rikkudes" ja hõlmab versioone kuni 2.0 ... Semveri jaoks on oluline versioonimuutus projekti murdepunktiks, seega versioonid 1.3 , 1.4 ja 1.9 sobiks ajaks 2.0 - aldeady nr.
Kui te ei tea, et vajate paketi konkreetset versiooni, soovitan teil alati vormingut kasutada ~1.2.3 on kõige turvalisem valik.

Kohalik ja globaalne konfiguratsioon

Parameetri vaikeväärtused ei ole kivisse raiutud. Võimalike konfiguratsiooniparameetrite üksikasjalik kirjeldus ( konfig) vaata linki.

Näiteks määrates:
("config": ("optimize-autoloader": true))
sunnite Composerit optimeerima klassikaarti pärast iga paketi installimist või värskendamist (ehk iga kord, kui luuakse automaatselt laaditav klassifail). See on veidi aeglasem kui vaikimisi automaatlaaduri loomine ja aeglustub projekti kasvades.

Teine kasulik parameeter võib olla vahemälu-failide maksimaalne suurus... Suurte projektide puhul (nagu eZ Publish või Symfony) võib vahemälu üsna kiiresti täituda. Vahemälu suuruse suurendamine võimaldab Composeril kauem kiiremini töötada.

Pange tähele, et konfiguratsiooniparameetreid saab määrata globaalselt ja sel juhul mõjutavad need kõiki projekte (vt konfiguratsioon). Näiteks vahemälu suuruse parameetri globaalseks määramiseks peate faili redigeerima ~ / .composer / config.json või käivitage:

Helilooja konfiguratsioon -- globaalne vahemälu-failide maksimaalne suurus "2048 MiB"

Profileerimine ja üksikasjalik väljund

Kui lisate parameetri --profiil mis tahes käsule, kui kasutate käsureal Composerit, sisaldab väljund rohkem kui lõpptulemus, näiteks:

Mälukasutus: 174,58 MB (tipp: 513,47 MB), aeg: 54,7 s
Kuid ka käsu täitmise aeg ja kasutatud mälumaht lisatakse iga väljundi rea algusesse:

Sensio \ Bundle \ DistributionBundle'i varade installimine veebi / kimpudesse / sensiodistributioni
Kasutan seda suvandit "aeglaste" pakettide tuvastamiseks ja jõudluse paranemise või halvenemise jälgimiseks.

Sarnaselt eelmisele, parameeter --sõnaline sunnib Composerit väljastama rohkem teavet iga teostatava operatsiooni kohta, andes teile sellest teada täpselt hetkel toimub. Mõned inimesed isegi seadsid helilooja --verbose --profiil käsu varjunimi helilooja vaikimisi.

Kohandatud allikad

Kui teie projekt pole veel Packagistis, peate mõnikord lihtsalt paketi GitHubist installima (näiteks kui pakett on alles arendamisel). Selleks vaadake meie juhendit.

Kui sul on selle Populaarse paketi versioonist, millest teie projekt sõltub, saate kasutada kohandatud allikaid koos tekstisisese aliasega, et lisada oma haru avalikule paketile, nagu Matthieu Napoli.

Helilooja kiirendamine

Mark Van Eijki kirjeldatud suurepärast tehnikat kasutades saate helilooja täitmist kiirendada, kutsudes selle läbi HHVM-i.

Teine võimalus on parameetriga --eelista-dist, kui see on installitud, laadib Composer alla projekti stabiilsed ZIP-versioonid, selle asemel, et kloonida versioonikontrolli kaudu (mis on palju aeglasem). Seda parameetrit kasutatakse vaikimisi, seega ei pea te seda stabiilsetes projektides lubama. Kui teil on vaja projekti allikatest laadida, kasutage parameetrit --eelista-allikas... Selle kohta saate lisateavet jaotisest installida .

Helilooja projekti mahu vähendamine

Kui olete "Heliloojasõbralike" projektide arendaja, pakub see osa ka teile huvi. Sellest Redditi postitusest saate faili kasutada .gitattributes režiimi jaoks paketi pakkimisel ignoreerida mõnda faili ja kausta --eelista-dist.
/ docs export-ignore / testib export-ignore /.gitattributes export-ignore /.gitignore export-ignore /.travis.yml export-ignore /phpunit.xml export-ignore
Kuidas see töötab? Kui laadite projekti GitHubisse üles, muudab see lingi automaatselt kättesaadavaks "Laadi zip alla", mille abil saate oma projekti arhiivi alla laadida. Lisaks kasutab Packagist neid automaatselt loodud arhiive sõltuvuste allalaadimiseks valikuga --eelista-dist mille see seejärel lokaalselt lahti pakkib (palju kiiremini kui projekti lähtefailide kloonimine). Kui lisate .gitattributes testid, dokumentatsioon ja muud failid, mis ei ole projekti loogikaga seotud, need arhiivid neid ei sisalda, muutudes palju lihtsamaks.

Samal ajal inimesed, kes tahan siluda oma teeki või käivitada teste, peate määrama parameetri --eelista-allikas.

PhpLeague on võtnud selle lähenemisviisi ja lisanud selle oma "Paki skelett"(Paki skelett), nii et kõik sellel põhinevad projektid on automaatselt "Dist sõbralik".

Näita

Kui unustasite äkki, millist PHP versiooni või selle laiendusi kasutate või vajate kõigi installitud projektide loendit (igaühe kirjeldusega) koos nende versioonidega, saate kasutada käsku näidata parameetritega --platvorm (-lk) ja --installitud (-i):

helilooja saade --installitud

$ helilooja saade --installitud behat / behat v3.0.15 stsenaariumile orienteeritud BDD raamistik PHP 5.3 jaoks behat / gherkin v4.3.0 Gherkin DSL parser PHP 5.3 jaoks behat / mink v1.5.0 Veebi aktsepteerimise testimise raamistik PHP 5.3 behat / mink-browserkit jaoks -driver v1.1.0 Symfony2 BrowserKit draiver Mink framework behat / mink-extension v2.0.1 Mink laiendus jaoks Behat behat / mink-goutte-driver v1.0.9 Goutte draiver Mink framework behat / mink-sahi-driver v1.1.0 Sahi jaoks. JS-draiver Mink framework behat / mink-selenium2-driver v1.1.1 Selenium2 (WebDriver) draiver Mink framework behat / sahi-client dev-master ce7bfa7 Sahi.js klient PHP 5.3 behat / symfony2-extension v2.0.0 Symfony2 raamistiku laienduse jaoks jaoks Behat behat / transliterator v1.0.1 String transliteraatori komponendid / bootstrap 3.3.2 Kõige populaarsem esiotsa raamistik tundlike, mobiilsete esimeste projektide arendamiseks veebis. komponendid / jquery 2.1.3 jQuery JavaScripti teegi doktriin / annotatsioonid v1.2.4 Docblock Annotations Parseri doktriin / vahemälu v1.4.1 Vahemällu salvestamise teek, mis pakub paljude vahemälu taustaprogrammide jaoks objektorienteeritud API-d doktriin / kogud v1.3.0 kogud / ühine teegi v2 doktriin 5.0 Common Library for Doctrine Projects doctrine / dbal v2.5.1 Database Abstraction Layer doktriin / doctrine-bundle v1.4.0 Symfony DoctrineBundle doktriin / doctrine-cache-bundle v1.0.1 Symfony2 Bundle with Communications1.0.1 suurtähtede ja ainsuse/mitmuse reeglid. doctrine / instantiator 1.0.4 Väike ja kerge utiliit objektide eksemplarimiseks PHP-s ilma nende konstruktoreid kutsumata doctrine / lexer v1.0.1 Põhiteek lekseri jaoks, mida saab kasutada ülalt-alla rekursiivse laskumise parserites. egulias / listeners-debug-command-bundle 1.9.1 Symfony 2 konsoolikäsk kuulajate silumiseks ezsystems / behatbundle dev-master bd95e1b Behat pakett abiks eZ komplektide ja projektide testimisel ezsystems / comments-bundle dev-master 8fZmenting system / demobundle dev-master c13fb0b Demopakett eZ Publish Platform ezsystems jaoks / demobundle-data v0.1.0 Data for ezsystems / demobundle ezsystems / ezpublish-kernel dev-master 3d6e48d eZ Publish API ja kernel. See on eZ Publish 5.ezsystems / platform-ui-assets-bundle v0.5.0 keskmes. Väliste varade sõltuvused PlatformUIBundle ezsystems / platform-ui-bundle dev-master 4d0442d eZ Platform UI Bundle ezsystems / privacy-cookie-bundle v0. 1 Privaatsusküpsisebänneri integreerimise kogum eZ Publish / eZ Platform fabpot / goutte v1. 0.7 Lihtne PHP Web Scraper friendsofsymfony / http-cache 1.3.1 Vahemälu kehtetuks tunnistamise haldamise tööriistad friendsofsymfony / http-cache-bundle 1.2.1 Määrake teepõhised HTTP vahemälu päised ja saatke tühistamistaotlused teie HTTP vahemälu guzzle / guzzle v3.9.3 PHP HTTP klient. Selle teegi tugi on aegunud, eelistades https://packagist.org/packages/guzzlehttp/guzzle hautelook / templated-uri-bundle 2.0.0 Symfony2 Bundle'i, mis pakub RFC-6570-ga ühilduvat ruuterit ja URL-i generaatorit. hautelook / templated-uri-router 2.0.1 Symfony2 RFC-6570-ga ühilduv ruuter ja URL-i generaator, kujutlege / kujutage ette 0.6.2 pilditöötlus PHP 5.3 jaoks incenteev / composer-parameter-handler v2.1.0 Helilooja skript, mis käsitleb teie ignoreeritud parameetrifaili instaclick / php -webdriver 1.0.17 PHP WebDriver for Selenium 2 jdorn / sql-formatter v1.2.17 a PHP SQL esiletõstmisteek knplabs / knp-menu v1.1.2 Objektorienteeritud menüüteek knplabs / knp-menu-bundle v1.1.2 See komplekt pakub KnpMenu teegi integreerimine kriswallsmith / assetic v1.2.1 Asset Management for PHP kriswallsmith / buzz v0.13 Lightweight HTTP klientliiga / flysystem 0.5.12 Paljud failisüsteemid, üks API. liip / Imagine-bundle 1.2.6 See pakett aitab kujutleda manipuleerimist, kasutades Imagine teegi monoloogi / monoloogi 1.13.1 Saadab teie logid failidesse, pesadesse, postkastidesse, andmebaasidesse ja erinevatesse veebiteenustesse nelmio / cors-bundle 1.3.3 Lisab CORS-i ( Cross-Origin Resource Sharing) päiste tugi teie Symfony2 rakenduses ocramius / proxy-manager 0.5.2 Teek, mis pakub utiliite objektide puhverserverite genereerimiseks, instantseerimiseks ja nendega üldiselt töötamiseks Oneup / flysystem-bundle v0.4.2 Integreerib Flysystemi failisüsteemi abstraktsiooniteegi teie Symfony2-ga projekt. pagerfanta / pagerfanta v1.0.3 Leheküljed PHP 5.3 jaoks phpdocumentor / reflection-docblock 2.0.4 phpspec / prophecy v1.4.1 Kõrgelt hinnatud pilkamisraamistik PHP 5.3+ phpunit / php-code-coverage 2.0.16 jaoks, mis pakub kogumist, töötlemist ja raamatukogu PHP koodi katvuse teabe renderdusfunktsioon. phpunit / php-file-iterator 1.4.0 FilterIteratori rakendus, mis filtreerib failid järelliidete loendi alusel. phpunit / php-text-template 1.2.0 Lihtne mallimootor. phpunit / php-timer 1.0.5 Utiliidiklass aja määramiseks phpunit / php-token-stream 1.4.1 Ümbris PHP "-i tokenisaatori laienduse ümber. phpunit / phpunit 4.6.4 Üksuse testimise raamistik. phpunit / phpunijectsmock .1 Mock Object teek PHPUnit psr / log 1.0.0 Ühine liides teekide logimiseks qafoo / rmf 1.0.0 Väga lihtne VC raamistik, mis muudab HTTP rakenduste / REST veebiteenuste ehitamise lihtsaks sebastian / komparaator 1. 1.1 Pakub funktsiooni PHP väärtuste võrdlemiseks võrdsuse jaoks sebastian / diff 1.3.0 Diff juurutamine sebastian / keskkond 1.2.2 Pakub funktsiooni HHVM / PHP keskkondade haldamiseks sebastian / eksportija 1.2.0 Pakub funktsiooni PHP muutujate eksportimiseks sebastian visualiseerimiseks / global -state 1.0.0 Globaalse oleku hetktõmmis sebastian / recursion-context 1.0.0 Pakub funktsiooni PHP muutujate rekursiivseks töötlemiseks sebastian / versioon 1.0.5 Teek, mis aitab hallata Git-hostitud PHP projektide versiooninumbrit sensio / distributsioon- pakett v3 .0.21 Symfony Distributionsi sensio / framework-extra-bundle v3.0.7 põhipakett See pakett võimaldab konfigureerida kontrollereid annotatsioonidega sensio / generator-bundle v2.5.3 See pakett genereerib teile koodi sensiolabs / security-checker v2 .0.2 Teie composer.lock swiftmailer / swiftmailer v5.4.0 turvakontroll Swiftmailer, tasuta funktsioonirikas PHP meiler symfony-cmf / routing 1.3.0 Laiendab Symfony2 marsruutimise komponenti en dünaamiliste marsruutide ja mitmete ruuterite aheldamiseks symfony / assetic-bundle v2.6.1 Integreerib Asseticu Symfony2 symfony / monolog-bundle v2.7.1 Symfony MonologBundle symfony / swiftmailer-bundle v2.3.8 Symfony SwiftmailerBundle raamistik Symfony SwiftmailerBundym. tedivm / stash v0.12.3 Vahemälu hoidmise koht. tedivm / stash-bundle v0.4.2 Sisaldab vahemällu salvestamise teegi Stash Symfonysse. twig / extensions v1.2.0 Twigi tavalised lisafunktsioonid, mis ei kuulu otseselt tuumikusse twig / twig v1.18.1 Twig, paindlik, kiire ja turvaline mallikeel PHP white-october / pagerfanta-bundle v1.0.2 komplekti jaoks Pagerfanta koos Symfony2 whiteoctober / leivapuru pakett 1.0.2 Väike leivapuru pakett Symfony2 zendframework / zend-code 2.2.10 jaoks pakub võimalusi suvalise koodi genereerimiseks, kasutades objektorienteeritud liidest zendframework / zend-eventmanager 2.0.2.10 /zend2.1. .10 zetakomponendid / baas 1.9 Baaspakett pakub põhiinfrastruktuuri, millele kõik paketid tuginevad. Seetõttu tugineb iga komponent sellele pakendile. zetacomponents / feed 1.4 See komponent tegeleb RSS1-, RSS2- ja ATOM-kanalite sõelumise ja loomisega, toetades erinevaid voomooduleid (dc, sisu, creativeCommons, geo, iTunes). zetacomponents / mail 1.8.1 Komponent võimaldab koostada ja/või sõeluda meilisõnumeid, mis vastavad meilistandardile. See toetab manuseid, mitmeosalisi sõnumeid ja HTML-meili. Samuti on see liides SMTP-ga, et saata e-kirju või IMAP-i, P. .. zetacomponents / system-information 1.1 Pakub juurdepääsu tavalistele süsteemimuutujatele, nagu protsessori tüüp ja kiirus ning saadaolev mälumaht.

Proovid (kuivjooksud)

Selleks et näha, kas uute sõltuvuste installimine õnnestub, võite kasutada parameetrit -- kuivtöö meeskondade jaoks installida ja värskendada... Sel juhul kuvab Composer kõik võimalikud probleemid ilma käsku ennast otseselt täitmata. Reaalseid muudatusi projektis ei tule. See meetod sobib suurepäraselt keerukate sõltuvuste testimiseks ja muudatuste seadistamiseks enne nende tegelikku tegemist.

Helilooja värskendus --dry-run --profile --verbose

Projekti loomine

Viimasena, kuid mitte vähemtähtsana, peaksime mainima käsku loo-projekt.

Uus projektikäsk võtab argumendina paketi nime, mille see seejärel kloonib ja käivitab helilooja installimine selle sees. See sobib suurepäraselt projektide lähtestamiseks – te ei pea enam GitHubis soovitud paketi URL-i otsima, seda kloonima, ise kausta minema ja käsku täitma installida.

Suured projektid, nagu Symfony ja Laravel, kasutavad juba seda lähenemisviisi oma "skeleti" rakenduste lähtestamiseks ning paljud teised on samuti sellega ühinemas.

Näiteks Laravelis kasutatakse seda järgmiselt:

Helilooja loo-projekti laravel / laravel --prefer-dist --profile --verbose
Meeskonnale loo-projekt saate edastada veel kaks parameetrit: tee kuhu soovite projekti installida (kui pole määratud, kasutatakse paketi nime) ja versioon(kui pole täpsustatud, kasutatakse viimast).

Järeldus

Loodan, et see näpunäidete ja nippide loend on teile abiks olnud. Kui meil jäi midagi kahe silma vahele, andke meile sellest teada ja me värskendame artiklit. Ja pidage meeles, et kui unustate mõne käsu või valiku, vaadake lihtsalt petulehte. Head komponeerimist!

Selles postituses jagan oma isiklikke muljeid sellise huvitava asja kasutamisest nagu. Kui keegi ei tea, siis see on PHP teekide sõltuvushaldur, mis teeb erinevate teekide installimise, uuendamise ja hooldamise oma projektis lihtsaks. Programmeerija vajab mugavaks tööks infrastruktuuri (seda ütlen teile kindlasti :- ). See on mugav tool, võimas masin kahe monitoriga ja kaasaegne IDE, andmebaasitööriistad, silumistööriistad. Kuid lisaks on oluline projekti enda arendustaristu.

Võtke näiteks Ruby. See keel on, pagan, lihtsalt trendilooja veebipiigade vallas. Seal on käepärased tellingute tööriistad (noh, ZF-il on ka see) ja tööülesannete täitmiseks sellised asjad nagu reha. Ma ei räägi migratsioonidest, ühiktestidest igasuguste pilaobjektidega. Kui ma Rubys kodeerisin, oli tunne nagu istuks lennukis äriklassis mugaval istmel ja teie ainus probleem on valida oma tujule vastava joogi.

Tegin nalja. Ruby puhul pole kõik nii roosiline. Seal on hunnik kõveraid kalliskive, arendajad lasevad mõnikord välja sellise ime, et emme ei muretse. Ma ei räägi madala tasemega šamanismist, kui on vaja teha midagi hajutatud või mitme lõimega süsteemi sarnast. Aga see postitus ei räägi sellest. Ja sellest, et Rubyl on sellised asjad nagu RubyGems.

RubyGems on süsteem Ruby projekti sõltuvuste haldamiseks. Eelkõige on selline asi nagu Bundler, mis ühe liigutusega installib vajalikud paketid või uuendab neid. Just temalt kirjutati ta jultunult maha ja oli heliloojale inspiratsiooniks.

Mida helilooja teha saab

Niisiis, lühike ülevaade funktsioonidest. Neid on ainult kaks: paketihaldus ja klassi automaatne laadimine. Pean ütlema, et ilma heliloojata võtsid need mõlemad ülesanded palju aega. Internet on endiselt täis artikleid nagu "kuidas siduda ZF 1.x ja Doctrine 2" või "kuidas installida Doctrine 2 ODM ja Doctrine 1 ORM". Perversioon, ütlete. Liialdasin meelega, aga tuleb tunnistada, et mõne raamistiku või teegi ületamiseks tuleb päris palju vaeva näha. See on muutunud koos helilooja ilmumisega.

Eriline tänu inimese automaatkoormusele. Oh, kui palju aega ma kunagi kulutasin Zend_Loader_Autoloaderi ja Doctrine / ClassLoaderi integreerimisele. See on nüüdseks minevik. Istume toolil

Composer.json näide

Siin on näide ühest projektist pärinevate sõltuvuste kirjeldusega.

("nõua": ("doktriin / tavaline": "2.3.0", "doktriin / migratsioonid": "dev-master", "doktriin / dbal": "2.3.0", "doktriin / 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 ")," autoload ": (" psr-0 ": (" ZendExtra ":" tarnija / netandreus / zend-extra / lib / "," DoctrineExtra ":" tarnija / netandreus / doctrine-extra / lib / "," MyProject ":" tarnija / myvendor / myproject / lib / "," Hydraators ":" misc / cache / "," ":" app / default / models / "))

Nii et lähme rida-realt. Nõudeplokis kirjeldame pakettide nimesid kujul tarnijaNimi / paketinimi ja meie projekti jaoks minimaalselt nõutavaid versioone. Seejärel laaditakse need ise alla ja installitakse tarnija kausta. Nagu näha, sai näiteks Doctrine küpsetatud mitmesse pakki korraga. Muide, migratsioonid eraldi paketile on ilmunud üsna hiljuti, nii et jääge projekti uudistega kursis. Avaldan sügavat tänu seltsimees simuktile ZF 1.x uusimate versioonide heliloojale ülekandmise eest. Kui omal ajal vaja oli, siis hakkasin seda tegema ... aga muude ülesannete tõttu ei jäänud aega. Nüüd on meil ühe projekti raames võimalus kasutada Doctrine 2 ODM + ORM + ZF 1.x + ZF 2.x komponente. Hull Vinigrette, aga me vajame teda. Sest liigume aeglaselt MySQL-ist (kas Michail Widenius mulle andeks andku) MongoDB-sse. Põhiline selgroog on ZF1 peal, kuid ka ZF2 pole tühikäigust uudishimust. / * intriig * /.

Nüüd on nõutav konfiguratsiooni teine ​​osa. Siin paneme paika klassid (õigemini nende nimeruumid) ja nende salvestuskohad, st. lahendada vastavate nimeruumide teed. Pöörake tähelepanu mõnele punktile. Õpetuse hüdraatorite jaoks (kui te ei tea, mis see on, võite selle vahele jätta) näitame teid, sest kui doktriini automaatlaadur puudub, ei leia see neid. Viimane rida on prügikasti asukoht, kus võivad paikneda mis tahes nimeruumiga klassid. Composeri põhiomadus seisneb selles, et selliseid prügikaste saab (õnneks) olla ainult üks. Aga meie projektis nõuti tunde igalt poolt, nii et pidime nii-öelda prügi vedama ja kõik ühte hunnikusse laduma. Muidugi tuleb see kunagi lahti võtta, aga nüüd, viimases kohas, on kogu prügi ühes kohas. Noh, ZendExtra ja DoctrineExtra on minu laiendused, mida ma osaliselt oma postitustes kirjeldasin.

Helilooja vead

Noh, kus ilma vigadeta. Võib-olla kõige tähelepanuväärsem viga. Kui olete kindel, et kõik on korras, värskendate php composer.phari, olete ... pettunud. Puuduseks on see, et helilooja ei laadi allikaid alla (õigemini ei värskenda neid), kui on määratud arendaja haru ja allikad on vanemad kui 6 kuud. Kahjuks on need failis composer.json doktriiniga paketid. Lahendus on lihtne, enne värskenduse tegemist eemalda doktriiniga paketid.

Teine viga oli see, et osade pakettide hoidlates on .gitignore fail, mis laaditakse alla uuendamise/installimise käigus. Ja kui paned siis sisse projekti lähtekoodi (koos selle paketiga), siis nad ei jõua. Näiteks komplektis, millega ma töötan, kuvatakse sortidega kausta asemel tühi fail. Pühendumine ja tõukamine läheb samas hästi ning kaabakad kurdavad, et midagi ei jõua kohale. Lahendus on lihtne, pärast Update'i kustutame koos pakettidega .gitignore failid allikatest.

Kas ma peaksin kasutama heliloojat või mitte?

Jah! Nagu keegi ütles, on teie teek nõme, kui selle juurtes pole faili composer.json. Mitte tõsiselt, see on möödas, kui php 4, phpclasses ja palju automaatlaadureid on virnas. Lõpetagem sitta koodi tootmine, jälgime standardeid (noh, vähemalt psr-0) ja kirjutame nii-öelda inimnäoga koodi. Olen täielikult ühtlustamise ja standardimise poolt! Nautige!

Aitäh!

Kui see artikkel aitas teid või soovite minu uurimistööd ja ajaveebi toetada, on siin parim viis seda teha.

Noh, viimases õppetükis lõpetasime tegelikult oma saidi tuuma kirjutamise ja sellest hetkest teen ettepaneku rattasõidust loobuda ja maailma üldsuse saavutuste hulka kuuluda.

Nimelt – hakka kasutama sõltuvushaldur PHP jaoks – helilooja. See võimaldab meil saidile hõlpsalt installida mitmesuguseid kasulikke asju, neid värskendada ja isegi eemaldada. Kui olete juba GNU / Linuxi paketihalduriga töötanud, olete selle kõigega väga tuttav.

Soojenduseks eemaldage Fenom põhikataloogist ja installige Composeri kaudu. Selleks peate saidi juurtes looma faili helilooja.json ja kirjuta sinna sisse vajalikud paketid (lisa saad lugeda Habrest):
("require": ("php": "> = 5.3.0", "fenom / fenom": "2. *")) Nüüd peate lihtsalt alla laadima composer.phar ja käivitama selle saidi juurtes:
php composer.phar install Sa ei pea saidilt modhost.pro midagi alla laadima – lihtsalt käivitage kataloogis Composer:
helilooja install Ja võluväel on meil / tarnija / kataloog, kuhu on installitud Fenom. Mida sellega edasi teha?

Toimimispõhimõte

Teeme natuke pausi ja ma selgitan täpselt, kuidas Composer töötab, kui te veel ei tea.

Composer on paketihaldur, mis töötab nendega vastavalt reeglitele helilooja.json... See, mida me sinna kirjutame, installitakse.

Pakettide installimisel läbib Composer nende reeglid ja genereerib kõige olulisema faili - / tarnija / autoload.php mis laadib kõik allalaaditud klassid. Selgub, et meil on vaja ainult see fail oma projekti kaasata ja nüüdsest saame oma tunde juhtida ilma nõudmata:
$ Fenom = uus Fenom :: tehas ($ tplDir, $ kompileDir); See tähendab, et süsteem juba teab, kus Fenom füüsiliselt asub ja me ei pea tegema reuire_once ("tee fenomini"). Samuti ei pea me Fenomi ennast oma projektis hoidma, piisab meie salvestamisest helilooja.json.

Veel kord konsolideerimiseks:

  1. Kirjutatakse helilooja.json
  2. Installige paketid saidi composer.phari kaudu
  3. Kaasame projekti /vendor/autoload.php
  4. Kasutame kõiki väljakujunenud klasse läbi uue klassi ()
Projektis pole lisafaile, lisanõuet pole, installitud pakette värskendatakse sama helilooja kaudu:
php composer.phari värskendus Kõik väga lihtne ja mugav. Sellist tööskeemi tuleb kasutada vaid korra ja rattasõitu on lihtsalt võimatu jätkata!

Fenomi ühendamine

Paigaldatud pakettidega töötamiseks peame lihtsalt oma klassi lisama autoload.php Tuum:
function __construct (massiivi $ config = massiivi ()) ($ this-> config = array_merge (massiivi ("controllersPath" => dirname (__ FILE__).) "/ Controllers /", "templatesPath" => dirname (__ FILE__). "/ Mallid / "," cachePath "=> dirname (__ FILE__)." / Vahemälu / "," fenomOptions "=> massiiv (" auto_reload "=> true," force_verify "=> true,),), $ config ); / / Näiteks siin request_once dirname (dirname (__ FILE__)). "/Vendor/autoload.php";) GetFenom () meetodil saate nüüd failide kontrollimise ja ühendamise, samuti nende laadimise välja visata klassid. Lõplik meetod näeb välja selline:
avalik funktsioon getFenom () (if (! $ this-> fenom) (proovige (if (! file_exists ($ this-> config ["cachePath"])) (mkdir ($ this-> config ["cachePath"]); ) $ this-> fenom = Fenom :: factory ($ this-> config ["templatesPath"], $ this-> config ["cachePath"], $ this-> config ["fenomOptions"]);) püüdmine (Erand $ e) ($ this-> log ($ e-> getMessage ()); return false;)) return $ this-> fenom;) Lihtsalt helistage Fenom :: tehasele ja see laadib ise. Siin on kohustus koos muudatustega – vaadake, kui palju koodi me oma projektist kohe eemaldasime!

Miks peaksime Fenomi kaasas kandma ja seda käsitsi värskendama, kui juba pikka aega on leiutatud Composer, mis selle eest palju paremini hoolitseb? Kõik, mida vajame, on panna projekti juure helilooja.json.

Nüüd refaktoreerime oma projekti nii, et see ühenduks ka autoload.php-ga.

Samal ajal tuleb failid füüsiliselt samades kataloogides dekomponeerida, et laadija teaks, kust neid otsida. Kuidas see täpselt töötab, on kirjeldatud ametlikes standardites, kuid soovitan teil tähelepanuta jätta.

Sellest tuleneb kaks järeldust: Composerit saab kasutada ainult PHP 5.3+ versioonis ja meie projekt tuleb nimeruumide kasutamiseks ümber kirjutada.

Kõigepealt peame oma projektile nime määrama. Las olla Brevis- ladina keelest "lühike". Meie / core / kataloog on nüüd Brevise nimeruum. Tähendab:

  • Core klassist saab \ Brevis \ Core ja see asub core \ Core.php
  • Kontrolleri klassist saab \ Brevis \ Controller ja see asub core \ Controller.php
  • Controlles_Home klassist saab \ Brevis \ Controllers \ Home ja see asub core \ Controllers \ Home.php
  • Klassist Controlles_Test saab \ Brevis \ Controllers \ Test ja see asub core \ Controllers \ Test.php
Pange tähele, et failide füüsiline asukoht on sama, mis nimeruum. Seda seetõttu, et järgime juba PSR-4 standardit.

Nüüd kirjutame iga klassi alguses kasutatava nimeruumi. Põhiklassidel on järgmised:
PhpStorm hakkab kohe esile tõstma kõiki Exceptioni ja Fenom kasutusi meie jaoks kui ebaõigeid, kuna neid kutsutakse nimeruumi sees, kuid täisnime määramata. Parandamiseks on 2 võimalust:

  1. Minge läbi kogu kood ja lisage nende klasside nimedele \, et saada \ Exception ja \ Fenom
  2. Ära põe jama, vaid kasuta varjunimesid – oskus määrata klassile lühike nimi
Loomulikult valime teise võimaluse:
Nüüd nimetame kontrollerid ümber ja määrame neis varjunimed:

Liigume autoload.php \ Brevis \ Core klassist index.php-sse, kuna Brevise nimeruum hakkab varsti automaatse laadimise kaudu ise tööle ja see ei vaja tarbetuid nõudmisi.

Index.php näeb nüüd välja selline:
Nõuda_ükskord dirname (__ FILE__). "/vendor/autoload.php"; $ Core = uus \ Brevis \ Core (); $ req =! tühi ($ _ TAOTLUS ["q"])? trimmi ($ _ TAOTLUS ["q"]): ""; $ Core-> handleRequest ($ req);
Kirjutame ümber meetodi \ Brevis \ Core :: handleRequest (), eemaldades kõik failikontrollid. Peame ainult kontrollima, kas klass eksisteerib kasutades hanki_klass ():
public function handleRequest ($ uri) ($ taotlus = explode ("/", $ uri); $ className = "\ Brevis \ Controllers \\". ucfirst (massiivi_nihe ($ taotlus)); / ** @var Kontroller $ kontroller * / if (! klass_exists ($ klassiNimi)) ($ kontroller = new Controllers \ Home ($ this);) else ($ kontroller = new $ className ($ this);) $ initsialiseeri = $ kontroller-> initsialiseeri ($ taotlus ); if ($ lähtesta === true) ($ vastus = $ kontroller-> käivita ();) elseif (is_string ($ lähtesta)) ($ vastus = $ lähtesta;) else ($ vastus = "Tekkis tundmatu viga lehe laadimise ajal ";) echo $ response;) Nagu näete, määrame laaditud kontrolleri täisnime, kontrollime selle olemasolu ja kui sellist kontrollerit pole, laadime \ Brevis \ Controllers \ Kodu.

Üldiselt jäi kogu loogika samaks ja koodi mahtu vähendati. Failidega käsitsi tööd ei tehta, ei nõuta, kogu töö klasside ühendamisel lasub autoload.php-l. Vastavalt sellele parameeter kontrolleridPath kaob süsteemi konfiguratsioonist.

Jääb alles lisada käivitamisse meie enda projekt. Selleks muutke faili composer.json järgmiselt:
("nimi": "Brevis", "automaatne laadimine": ("psr-4": ("Brevis \\": "core /")), "require": ("php": "> = 5.3.0" , "fenom / fenom": "2. *")) Automaatse laadimise plokk määrab, mida lisaks installitud pakettidele alla laadida. Võti mpv-4 näitab, kuidas täpselt meie projekti laadida, ja näitab kataloogi tuum / peamise nimeruumina Brevis.

Käivitage
php composer.phari värskendus ja meie klassid lähevad automaatsele laadimisele. Kõik peaks töötama, vaadake muudatusi GitHubis.

Järeldus

Seetõttu kirjutasime oma projekti ümber vastavalt PHP programmeerimismaailma uusimatele standarditele. Nõus, see polnud nii hirmutav?

Kuid nüüd on meie kood puhas, korras, standarditele vastav ja töötab suurepäraselt!

Järgmises õppetükis installime Composeri kaudu xPDO 3.0 (jah, see on juba ümber kirjutatud ja toetab nimeruume, kuigi seni ainult arendaja harus) ja ühendame selle oma andmebaasiga.

Kirjutame skeemi, genereerime selle jaoks mudeli ja loome paar tabelit.