Manapság rengeteg PHP framework érhető el, mindegyik a maga előnyével és hátrányával. Többször nehéz dönteni, hogy egy projekthez mely keretrendszer felhasználása lenne a legjobb megoldás. Az egyik keretrendszernek az MVC része, egy másiknak pedig az ORM implementációja az igazi. A kérdés az, hogy van-e arra mód, hogy egy-egy keretrendszernek csak a számunkra hasznos részét használjuk fel, anélkül, hogy több megabájtnyi "felesleges" forráskódot húznánk be?
A válasz igen. Ennek a problémának az orvoslására van egy roppant egyszerűen felhasználható tool: a Composer.
A tool nem más, mint egy dependency manager, azaz segítségünkre lesz a különböző külső komponensek kezelésében - egy adott verzió letöltésén át a fájlok naprakészen tartásáig.
Beszerzés
A Composer a következő helyről szerezhető be: katt.
Akár git -tel, akár kézi letöltéssel szedjük le a legfrissebb snapshotot, csak egy fájlról lesz szó, a composer.phar -ról, ami egy PHP Archive. A phar-ról bővebben lásd itt: katt.
Konfiguráció
A Composer egyszerűen konfigurálható be: szükség van egy composer.json fájlra, ez fogja tartalmazni azon modulok, komponensek listáját, amiket a Composer-re szeretnénk bízni.
Az alábbi példában a Symfony 2 framework HttpFoundation komponensét szeretném felhasználni a projectemben, annak is egy 2.* -es (kettes major - bármilyen minor) verzióját.
{
"require": {
"symfony/http-foundation": "2.*"
}
}
Futtatás
A Composer futtatásához szükség lesz parancssori php-re és egy git -re, mindkettő a PATH környezeti változón legyen jelen az adott op. rendszeren. A composer.phar-nak egy mappában kell lennie a composer.json fájllal.
>php composer.phar install
Installing dependencies
- Installing symfony/http-foundation (dev-master)
Cloning cf8e8324c68ce584525502702866485f17f1c8a5
Writing lock file
Generating autoload files
>
Eredmény
A Composer létrehoz egy vendor mappát, ebbe helyezi el az új fájlokat. Emellett mindennek a tetejére egy saját autoload.php fájlt is hoz létre a tool, így az új fájlok autoload része is meg van oldva számunkra.
Példa
<?php
//index.php
require_once '/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$request = Request::createFromGlobals();
$input = $request->get('name', 'World');
$response = new Response(sprintf('Hello %s', htmlspecialchars($input, ENT_QUOTES, 'UTF-8')));
$response->send();
Így amennyiben az alkalmazásunk mappaszerkezete a következő:
+-- composer.json ¦ vendor ¦ +-- autoload.php
¦ +--[Composer által kezelt mappák] L--index.php
az index.php meghívásakor "Hello World" (vagy "Hello <$_GET["name"] paraméter értéke>" ) jelenik majd meg, mégpedig OOP módon a Symfony 2 -es framework Request és Response objektumokkal.
Módosítás
Ha további komponenseket szeretnénk hozzáadni a projecthez vagy egy másik verzióra cserélni a meglévőket, ekkor csak a composer.json fájl tartalmán kell módosítani és a >php composer.phar update
parancs futtatásával a Composer megoldja helyettünk a fájlok cseréjét. További parancsok és egyéb olvasnivaló itt lelhető meg: katt.
Mégvalami
Fontos, hogy csak olyan keretrendszerek komponensei, moduljai tölthetők be a Composerrel, amelyek egyrészt lazán kapcsoltak ( pölö Symfony 2 vagy a Zend), illetve a Composer package repository-jában fellelhetők. Ezutóbbi orvosolható, mivel egy egyszerű regisztráció után akár saját komponenseket is submitálhatunk a repóba.