Näin aloitat composer.phar-tiedoston käytön
Vielä jokin aika sitten ei ollut yhtä ainoaa tapaa asentaa kirjastoja PHP:tä varten. Ratkaisut vaihtelivat kehyksittäin. Tilanne muuttui Composerin ilmestyessä, josta on tullut vakiotapa lisätä riippuvuuksia sovellukseen tai jopa hallita kehysten komponentteja. Composeria on helppo käyttää sekä ilmaisohjelmien että organisaation omien pakettien asentamiseen ja projektien konfigurointiin.
Huom.! Tämä blogijuttu on suunnattu enemmänkin aloittelevalle PHP-kehittäjälle, joka on jo perehtynyt joihinkin yleisiin kehyksiin, kuten Laravel tai Symfony, ja joka haluaa kokeilla jonkin rakentamista nollasta.
Lyhyesti sanottuna Composer on paketinhallintaohjelma, mutta se tekee paljon muutakin. Composer on jo asennettuna kaikilla Zone-alustan palvelimilla, ja sitä voidaan käyttää virtuaalipalvelimella ilman lisätoimia. Composer ratkaisee useita ongelmia, jotka muuten aiheuttaisivat kehittäjille lisää työtä. Kaksi tärkeintä näistä ovat:
1. Riippuvuuksien ja kirjastojen hallinta
Jos haluaa käyttää jotakin kolmannen osapuolen kirjastoa, riittää, kun lisää Composerissa vain yhden komennon. Tämä edellyttää tietenkin, että kyseinen kirjasto on jo Composerin rekisterissä. Rekisteri voi olla julkinen tai organisaation sisäinen, suljettua koodia varten tarkoitettu.
Composer helpottaa kirjastojen asennusta, sillä voit tehdä sen vain yhdellä komennolla. Asennuksen aikana Composer tarkistaa kirjastojen yhteensopivuuden. Tämä on erityisen hyödyllistä tilanteessa, jossa toisen kirjaston version sopivuus poikkeaa toisen kirjaston version omasta ja molemmat kirjastot ovat riippuvaisia kolmannesta paketista. Composer löytää mahdollisimman uuden, sopivan ja täsmäävän version. Jos tämä ei ole mahdollista, Composer ilmoittaa siitä.
2. Luokkien automaattinen lataus
Ne, jotka tuntevat hieman enemmän historiaa, ovat tietoisia aikakaudesta ennen luokan automaattisen latauksen standardeja. Tuolloin jokainen sovellus kirjoitti oman koodinsa hakeakseen luokan sisältävän tiedoston, jota ei ollut vielä ladattu PHP-koodiin. Joissakin tapauksissa koodin suorittamisen alussa ladattiin kaikki luokat liittämällä kaikki tiedostot require_once-komennolla, joka saattoi tulla käyttöön koodissa.
Onneksi ajan mittaan on keksitty PSR-0 ja sitä nykyaikaisempi PSR-4-standardi, jotka määrittelevät, miten luokan nimen tulisi vastata tiedostopuun hierarkiaa. Nykyään tähän ei enää tarvitse perehtyä kovin syvällisesti, koska Composer auttaa asettamaan kaikki luokkien automaattiset latausohjelmat, ja PHP-koodin kirjoittaja voi keskittyä vain varsinaisiin työtehtäviinsä.
Yksinkertainen esimerkki Composerista
Olipa sovellus tai komentosarja kuinka yksinkertainen tahansa, aina on helppo aloittaa Composerin asetusten tekemisellä, jos aikoo käyttää ulkoisia kirjastoja.
Esitelläksemme Composerin vähimmäistason mahdollisuuksia ja osoittaaksemme, kuinka paljon se helpottaa elämää, luomme CLI-sovelluksen (päätelaitteella suoritettava sovellus), joka tarkistaa HTTP:n kautta jonkin URL-osoitteen ja sen HTTP-koodin. Vaikka tämä voidaan tehdä myös pelkällä Curlilla, käytämme esimerkissä erillistä pakettia nimeltä Guzzle.
Luomme ensin kansion nimeltä pinger
ja siirrymme siihen:
mkdir pinger
cd pinger
PHP-koodiin kirjoitamme pinger.php
-nimisen tiedoston. Oletamme, että kirjoittamamme luokat sijaitsevat kansiossa src
ja ne on luotu PSR-4-standardin mukaan.
Aloitamme projektin suorittamalla seuraavan komennon:
composer init
Sitten kysytään useita kysymyksiä. Useimmat näistä ovat valinnaisia, mutta jotkin tärkeimmät kannattaa silti asettaa.
- Package name on luodun sovelluksen vapaasti valittu nimi muodossa paketin-valmistaja/paketin-nimi.
- Description on suppea kuvaus, joka luonnehtii sovellusta tai kirjastoa.
- Author määrittelee tekijän, mikä on hyödyllistä, jos luotu ohjelmisto on tarkoitus saattaa julkisesti saataville.
- Minimum Stability määrittää Composerin kautta lisättyjen kirjastojen vähimmäisvakausvaatimuksen. Sovellusta luotaessa on usein tärkeää löytää tasapaino vakauden ja uutuuden välillä. Se voidaan asettaa arvolla dev tai stable, jotka kuvaavat itseään.
- Package Type kuvailee tulevan ohjelman tyyppiä. Esimerkiksi ”package” sopii kirjastolle, jota käytetään osana muuta sovellusta, tai ”project” itsenäiselle sovellukselle, johon liitetään kirjastoja.
- License-kenttä kannattaa täyttää, jos koodi tulee julkisesti saataville. Muuten sillä ei ole väliä.
Seuraavaksi kysytään, haluatko asentaa jo jonkin riippuvuuden, mutta ohitamme nämä kohdat toistaiseksi painamalla yksinkertaisesti Enter-näppäintä.
Kun etenemme kysymykseen Add PSR-4 autoload mapping?, luomme PSR-4 autoload -asetukset, jotka johdetaan ensimmäisestä kysymyksestä. Tämä tarkoittaa, että CamelCase-tyylinen versio pakettimme nimestä jakaa valmistajan ja paketin nimen nimiavaruuksien kesken. Esimerkissä asetamme nimeksi MyPackage
.
Seuraavaksi tulee vain vahvistaa luotu composer.json
painamalla Enter-näppäintä.
Composer tuotti oletusasetuksilla seuraavat tiedostot ja hakemistot:
- src-hakemisto, jossa on sovelluksen nimiavaruudessa oleva koodi
- vendors-hakemisto, johon asennetaan riippuvuudet eli Composerin kautta asennettavat kirjastot. Tässä kansiossa sijaitsee myös autoload.php-tiedosto, joka tulee sisällyttää (include) PHP-komentosarjaan.
- composer.json-tiedosto, Composerin asetukset projektissa.
Nyt kun composer.json
on luotu, meidän on otettava käyttöön sen autoloader, joka huolehtii sekä itse sovelluksen että lisättyjen kirjastojen luokkien automaattisesta lataamisesta. Sitä varten luomme sovellukselle CLI:ssä käytettävän PHP-tiedoston nimeltä pinger.php
.
<?php
use Composer\Autoload\ClassLoader;
// laeme sisse composer'i
require_once __DIR__ . '/vendor/autoload.php';
Code language: PHP (php)
Asennamme nyt Guzzle 7 -nimisen HTTP-asiakassovelluksen. Sitä varten suoritamme komennon:
composer require guzzlehttp/guzzle:^7.0
Code language: JavaScript (javascript)
Juurihakemistoomme syntyi tiedosto nimeltä composer.lock
. Tässä tiedostossa säilytetään tiettynä hetkenä asennettujen riippuvuuksien tarkka versio. Kun seuraavan kerran suoritetaan composer install
-komento, kirjastot asennetaan täsmälleen samana versiona, mikä varmistaa, että käytössä on täsmälleen sama minor- ja patch-versio kuin sovelluksen luomisen tai päivittämisen aikana.
Täydennämme pinger.php
-tiedostoa siten, että se käyttää Guzzlen kirjastoa jonkin URL-osoitteen HTTP-vastauksen koodin näyttämiseen.
<?php
use GuzzleHttp\Client;
require_once __DIR__ . '/vendor/autoload.php';
$siteUrl = 'https://www.google.com';
$client = new GuzzleHttp\Client(['base_uri' => $siteUrl]);
$response = $client->request('GET', '');
echo $response->getStatusCode();
Code language: HTML, XML (xml)
Tämä komentosarja tuottaa kyseisen URL-osoitteen HTTP-koodin, joka 2XX:n tapauksessa tarkoittaa onnistunutta kyselyä.
Jos halutaan luoda verkkosovellus, niin docroot, johon Apache HTTP -kyselyt ohjataan, voisi sijaita erillisessä kansiossa, jonka nimi voi olla esimerkiksi public. Sinne tulisi sijoittaa ns. front controller index.php
, joka ottaa vastaan kaikki kyselyt ja sen mukaan suorittaa koodin src
-kansiossa olevien luokkien avulla.
Luomme tiedoston public/index.php
.
<?php
use MyPackage\Controller;
require_once __DIR__ . '/../vendor/autoload.php';
(new Controller())->showPage();
Code language: HTML, XML (xml)
Luomme controlleria varten luokan tiedoston src/Controller.php
. Koska asetimme ennen PSR-4:n automaattisen latausohjelman vastaavaan nimiavaruuteen, vastaava luokka latautuu index.php
:ssä erillistä tiedostoa määrittämättä.
<?php
namespace MyPackage;
use GuzzleHttp\Client;
class Controller
{
public function showPage()
{
$siteUrl = 'https://www.google.com';
$client = new Client(['base_uri' => $siteUrl]);
$response = $client->request('GET', '');
echo $response->getStatusCode();
}
}
Code language: HTML, XML (xml)
Jos nyt kohdistetaan docroot public
-kansioon, näkyy selaimessa HTTP-koodi, kuten komentorivisovelluksessakin.
Huom.! Yleensä ei saa asettaa docrootiksi kansiota, joka sisältää Composerilla lisättyjä tai sovelluksen luokkien tiedostoja. Siksi loimme tässä erillisen public-kansion ja koko koodi sijaitsee hakemistopuussa sen yläpuolella, jotta HTTP-protokollan kautta ei voida päästä niihin.
Tiivistelmä
Tämä ratkaisu tarjoaa yksinkertaisen tavan aloittaa PHP-sovelluksen rakentaminen tyhjästä Composerin avulla. Vaikka aina ei kannatakaan keksiä pyörää uudelleen, joskus kannattaa kirjoittaa sovellus ilman kehystä, jotta voidaan opetella kieltä tai luoda hyvin yksinkertaisia sovelluksia. Tämä postaus onkin kirjoitettu enemmänkin ohjeeksi, eikä siinä kuvattu esimerkki oikeastaan tee mitään monimutkaista.