---
title: "Näin aloitat composer.phar-tiedoston käytön"
canonical_url: "https://www.speedzone.fi/blogi/nain-aloitat-composer-phar-tiedoston-kayton/"
post_type: "post"
published: "2024-07-11T07:11:16+00:00"
modified: "2024-08-09T07:36:36+00:00"
author: "Ingmar Aasoja"
featured_image: "https://www.speedzone.fi/static/sites/2/2024/07/Nain-aloitat-composer.phar-tiedoston-kayton-.webp"
taxonomies:
  category:
    - name: "Tekninen"
      url: "https://www.speedzone.fi/blogi/category/tekninen/"
  post_tag:
    - name: "Composer"
      url: "https://www.speedzone.fi/blogi/tag/composer/"
    - name: "Composer.phar"
      url: "https://www.speedzone.fi/blogi/tag/composer-phar/"
    - name: "Kehittäjälle"
      url: "https://www.speedzone.fi/blogi/tag/kehittajalle/"
    - name: "php"
      url: "https://www.speedzone.fi/blogi/tag/php/"
    - name: "verkkosivu"
      url: "https://www.speedzone.fi/blogi/tag/verkkosivu/"
  skills:
    - name: "Aloitteleville"
      url: "https://www.speedzone.fi/blogi/skill/aloitteleville/"
    - name: "Asiantuntijalle"
      url: "https://www.speedzone.fi/blogi/skill/asiantuntijalle/"
    - name: "Edistyneille"
      url: "https://www.speedzone.fi/blogi/skill/edistyneille/"
---

# 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** [**Composer**](https://getcomposer.org/)**in 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](https://laravel.com/) tai [Symfony](https://symfony.com/), ja joka haluaa kokeilla jonkin rakentamista nollasta.

![Näin aloitat composer.phar-tiedoston käytön](https://www.speedzone.fi/static/sites/2/2024/07/Nain-aloitat-composer.phar-tiedoston-kayton--1024x577.jpg)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](https://packagist.org/) 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](https://www.php-fig.org/psr/psr-0/) ja sitä nykyaikaisempi [PSR-4](https://www.php-fig.org/psr/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](https://docs.guzzlephp.org/en/stable/).

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**](https://getcomposer.org/doc/04-schema.md#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
<?php

use Composer\Autoload\ClassLoader;

// laeme sisse composer'i
require_once __DIR__ . '/vendor/autoload.php';

Code language: PHP (php)
```

Asennamme nyt [Guzzle 7](https://docs.guzzlephp.org/en/stable/) -nimisen HTTP-asiakassovelluksen. Sitä varten suoritamme komennon:

```javascript
composer require guzzlehttp/guzzle:^7.0Code 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.

```xml
<?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`.

```xml
<?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ä.

```xml
<?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 *docroot*iksi 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.
