---
title: "Kuidas alustada composer.phar kasutamist"
canonical_url: "https://www.zone.ee/blogi/kuidas-alustada-composer-phar-kasutamist/"
post_type: "post"
published: "2024-06-28T07:03:51+00:00"
modified: "2024-06-28T07:03:51+00:00"
author: "Ingmar Aasoja"
featured_image: "https://www.zone.ee/static/sites/2/2024/06/Kuidas-alustada-composer.phar-kasutamist-2.webp"
taxonomies:
  category:
    - name: "Tehniline"
      url: "https://www.zone.ee/blogi/category/tehniline/"
  post_tag:
    - name: "Arendajale"
      url: "https://www.zone.ee/blogi/tag/arendajale/"
    - name: "Arendus"
      url: "https://www.zone.ee/blogi/tag/arendus/"
    - name: "Composer"
      url: "https://www.zone.ee/blogi/tag/composer/"
    - name: "Composer.phar"
      url: "https://www.zone.ee/blogi/tag/composer-phar/"
    - name: "PHP"
      url: "https://www.zone.ee/blogi/tag/php/"
    - name: "Veebiarendus"
      url: "https://www.zone.ee/blogi/tag/veebiarendus/"
    - name: "veebilehe arendus"
      url: "https://www.zone.ee/blogi/tag/veebilehe-arendus/"
  skills:
    - name: "Algajale"
      url: "https://www.zone.ee/blogi/skill/algajale/"
    - name: "Edasijõudnule"
      url: "https://www.zone.ee/blogi/skill/edasijoudnule/"
    - name: "Spetsialistile"
      url: "https://www.zone.ee/blogi/skill/spetsialistile/"
---

# Kuidas alustada composer.phar kasutamist

**Veel mõnda aega tagasi ei olnud PHP jaoks ühtset moodust teekide paigaldamiseks. Olenevalt raamistikust olid lahendused erinevad. See muutus koos [Composer](https://getcomposer.org/)’i ilmumisega, mis on tänapäevaks muutunud standardseks viisiks sõltuvuste lisamiseks rakendusse või isegi raamistike komponentide haldamiseks. Composerit on lihtne kasutada nii vabavaraliste kui ka organisatsiooni siseste pakkide paigaldamiseks ning projektide seadistamiseks.**

**NB! Käesolev blogiartikkel on suunatud pigem algajale PHP arendajale**, kes on juba kokku puutunud mõne levinud raamistiku, näiteks [Laraveli](https://laravel.com/) või [Symfonyga](https://symfony.com/), ning kes soovib katsetada midagi nullist ise ehitada.

![Kuidas alustada composer.phar kasutamist 2](https://www.zone.ee/static/sites/2/2024/06/Kuidas-alustada-composer.phar-kasutamist-2-1024x577.jpg)Lühidalt öeldes on Composer pakihaldur, kuid tegelikult teeb see veel palju rohkemat. Composer on kõikides Zone platvormiga serverites juba paigaldatud ning seda saab kasutada virtuaalserveris ilma lisatööta. Composer lahendab mitmeid probleeme, mis arendajatele muidu lisatööd tekitaksid. Kaks kõige olulisemat neist on järgmised:

### 1. Sõltuvuste ja teekide haldus

Kui soovid kasutada mõnda kolmanda osapoole teeki, siis piisab Composeris vaid ühest käsust selle lisamiseks. Eelduseks on muidugi see, et vastav teek juba asub Composer’i registris. Register võib olla nii [avalik](https://packagist.org/) kui ka organisatsiooni sisene, kinnise koodi tarbeks.

Composer teeb teekide paigaldamise lihtsaks, võimaldades seda teha vaid ühe käsuga. Paigaldamise käigus kontrollib Composer teekide omavahelist sobivust. See on eriti kasulik olukorras, kus ühe teegi versiooni sobivus erineb teise teegi omast ning mõlemad teegid sõltuvad kolmandast paketist. Composer leiab võimalikult uue sobiva ja kattuva versiooni. Kui see pole võimalik, siis annab Composer sellest teada.

### 2. Klasside automaatne laadimine

Need, kes tunnevad veidi rohkem ajalugu, on teadlikud ajast enne klassi autolaadimise standardeid. Tollal kirjutas iga rakendus oma koodi selleks, et otsida üles klassi sisaldavat faili, mida ei olnud veel PHP koodi sisse laetud. Mõnel juhul laeti koodi käivitamise alguses sisse kõik klassid, liites kõik failid kokku “require\_once” käsuga, mis võis koodis kasutusele tulla.

Õnneks on aja jooksul loodud [PSR-0](https://www.php-fig.org/psr/psr-0/) ja kaasaegsem [PSR-4](https://www.php-fig.org/psr/psr-4/) standardid, mis defineerivad, kuidas klassi nimi peaks vastama failipuu hierarhiale. Tänapäeval ei pea sellele enam eriti süvenema, sest Composer aitab seadistada kõik klasside autolaaderid ning PHP koodi kirjutaja saab keskenduda vaid oma tööülesannetele.

## **Lihtne Composer’i näidis**

Ükskõik kui lihtne rakendus või skript kasutusel on, **alati** on lihtne alustada Composer’i seadistamisega, kui on plaan kasutada väliseid teeke.

Selleks, et tutvustada Composer’i miinimumtasemel võimekusi ning näidata, kui lihtsaks see elu teeb, loome CLI (terminalis käivitatava) rakenduse, mis käib HTTP kaudu kontrollimas mõnda URL-i ning selle HTTP koodi. Kuigi seda saab teha ka lihtsalt Curl’iga, kasutame näidise tarvis eraldi pakki nimega [Guzzle](https://docs.guzzlephp.org/en/stable/).

Loome kõigepealt kausta nimega `pinger` ning siseneme sinna:

```
mkdir pinger
cd pinger
```

PHP koodi kirjutame faili nimega `pinger.php`. Oletame, et meie enda kirjutatud klassid asuvad kaustas `src` ning on loodud vastavalt PSR-4 standardile.

Alustame projekti käivitades järgmise käsu:

```
composer init
```

Seejärel küsitakse mitmeid küsimusi. Enamik neist on valikulised, aga siiski tasub seadistada mõned olulisemad.

- **Package** name on loodud rakenduse vabalt valitud nimi kujul **paki-tootja/paki-nimi**.
- **Description** on lühikirjeldus rakenduse või teegi iseloomustamiseks.
- **Author** defineerib autori, mis on kasulik, kui loodud tarkvara plaanitakse avalikult kättesaadavaks teha.
- **[Minimum Stability](https://getcomposer.org/doc/04-schema.md#minimum-stability)** määrab ära Composer’i kaudu lisatud teekide miinimum stabiilsuse nõude. Rakendust luues on sageli oluline tasakaal versioonide stabiilsuse ja uudsuse vahel. Selle saab seadistada väärtustega **dev** või **stable**, mis on iseennast kirjeldavad.
- **Package Type** kirjeldab loodava tarkvara tüüpi. Näiteks “package” sobib teegile, mida kasutatakse osana mõnes teises rakenduses, või project iseseisvale rakendusele, millele liidetakse teeke.
- **License** väli tuleb kindlasti täita, kui kood saab avalikult kättesaadavaks. Muul juhul ei mängi see erilist rolli.

Järgmisena küsitakse, kas soovitakse paigaldada juba mõnda sõltuvust, aga need osad jätame hetkel vahele lihtsalt “Enterit” vajutades.

Kui jõuame küsimuseni **Add PSR-4 autoload mapping?**, siis loome PSR-4 autoload seaded, mis tuletatakse kõige esimesest küsimusest. See tähendab, et PascalCase versioon meie paki nimest jagab tootja ja paki nime namespace’de vahel ära. Näidises seadistame selleks `MyPackage`.

Järgmisena on vaja vaid loodud `composer.json` kinnitada, vajutades Enter.

Composer lõi vaikeseadistusega järgmised failid ja kataloogid:

- **src** kataloog, kus on rakenduse namespace’is olev kood
- **vendors** kataloog, kuhu paigaldatakse sõlutuvused, ehk composeri kaudu paigaldatavad teegid. Selles kaustas paikneb ka **autoload.php** fail, mis tuleb PHP skriptis *include*’da
- **composer.json** fail, composer’i seadistused projektis.

Nüüd, kui `composer.json` on loodud, peame kasutusele võtma selle autoloader’i, mis hoolitseb nii rakenduse enda kui ka lisatud teekide klasside automaatse laadimise eest. Selleks loome rakendusele CLI-s kasutatava PHP faili nimega `pinger.php`.

```php
<?php

use Composer\Autoload\ClassLoader;

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

Code language: PHP (php)
```

Paigaldame nüüd HTTP klientrakenduse [Guzzle 7](https://docs.guzzlephp.org/en/stable/). Selleks käivitame käsu:

```javascript
composer require guzzlehttp/guzzle:^7.0Code language: JavaScript (javascript)
```

Meie juurkataloogi tekkis fail nimega `composer.lock`. See fail hoiab täpset versiooni paigaldatud sõltuvustest antud hetkel. Kui järgmisel korral käivitada `composer install`, siis paigaldatakse teegid täpselt samas versioonis, kindlustades sellega olukorra, et kasutusel on täpselt sama minor ja patch versioon, mis rakenduse loomise või uuendamise ajal.

Täiendame `pinger.php` faili nii, et see kasutaks Guzzle’i teeki mõne URL-i HTTP vastuse koodi kuvamiseks.

```xml
<?php

use GuzzleHttp\Client;

require_once __DIR__ . '/vendor/autoload.php';

$siteUrl = 'https://www.google.ee';

$client = new GuzzleHttp\Client(['base_uri' => $siteUrl]);
$response = $client->request('GET', '');

echo $response->getStatusCode();
Code language: HTML, XML (xml)
```

Antud skript annab väljundiks vastava URL-i HTTP koodi, mis 2XX puhul tähendab õnnestunud päringut.

Kui on soov luua veebirakendus, võiks *docroot*, kuhu Apache HTTP päringud suunatakse, asuda eraldi kaustas, näiteks **public**. Sinna tuleks paigutada nn **front controller** `index.php`, mis võtab vastu kõik päringud ja vastavalt sellele käivitab koodi `src` kaustas olevate klasside abil.

Loome faili `public/index.php`.

```xml
<?php

use MyPackage\Controller;

require_once __DIR__ . '/../vendor/autoload.php';

(new Controller())->showPage();Code language: HTML, XML (xml)
```

Loome controller’i tarvis klassi faili `src/Controller.php`. Kuivõrd me varem seadistasime PSR-4 autolaaduri vastavale namespace’ile, siis laetakse `index.php`-s vastav klass sisse eraldi faili määramata.

```xml
<?php

namespace MyPackage;

use GuzzleHttp\Client;

class Controller
{
    public function showPage()
    {
        $siteUrl = 'https://www.google.ee';

        $client = new Client(['base_uri' => $siteUrl]);
        $response = $client->request('GET', '');

        echo $response->getStatusCode();
    }
}Code language: HTML, XML (xml)
```

Kui nüüd suunata *docroot* `public` kausta peale, siis kuvatakse brauseris sarnaselt käsurea rakendusele HTTP kood.

**NB!** Reeglina ei tohi *docroot*’iks määrata kausta, mis sisaldab endas Composer’iga lisatud või rakenduse klasside faile. Seepärast lõime siin **public** kausta eraldi ning kogu kood asub kataloogipuus selle kohal, et üle HTTP ei oleks neile ligipääsu.

## **Kokkuvõtteks**

Loodud lahendus pakub lihtsat viisi, kuidas alustada nullist PHP rakenduse loomist, kasutades selleks Composer’it. Kuigi jalgratast ei ole alati mõistlik uuesti leiutada, siis keele tundma õppimiseks või väga lihtsate rakenduste loomiseks võib mõistlik olla kirjutada rakendus teinekord ka ilma raamistikuta. Käesolev postitus ongi kirjutatud pigem suunisena ning selles kirjeldatud näidis tegelikult midagi keerukat ei tee 🙂

---

**NB! Loe kindlasti lisaks ka[ kaheksakst Composer’i käsust](https://www.zone.ee/blogi/2024/07/12/kaheksa-composeri-kasku-mida-voiks-teada-iga-php-arendaja/), mida iga PHP arendaja teada võiks.**
