Ebben leírásban Composer segítségével készítünk egy egyszerű PHP projektet, keretrendszerek nélkül.
A projektben elkészített program forráskódja:
Hozzuk létre a projekt fájlt:
mkdir triangle cd triangle
Készítsük elő a projektet:
composer init
A futtatás eredményeként egy interaktív programot kapunk, ahol kimenet ehhez hasonló:
composer init Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (<vendor>/<name>) [janos/triangle]: Description []: Háromszog számítások Author [Nagy Janos <janos@zold.lan>, n to skip]: Minimum Stability []: dev Package Type (e.g. library, project, metapackage, composer-plugin) []: License []: MIT Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? n Would you like to define your dev dependencies (require-dev) interactively [yes]? n Add PSR-4 autoload mapping? Maps namespace "Janos\Haromszog" to the entered relative path. [src/, n to skip]: { "name": "janos/triangle", "description": "Háromszog számítások", "license": "MIT", "autoload": { "psr-4": { "Janos\\Triangle\\": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "minimum-stability": "dev", "require": {} } Do you confirm generation [yes]? y Generating autoload files Generated autoload files PSR-4 autoloading configured. Use "namespace Janos\Triangle;" in src/ Include the Composer autoloader with: require 'vendor/autoload.php';
Hozzuk létre a projekt src könyvtárban a Shape könyvtárakat.
mkdir src/Shape
Javítsuk a composer.json fájlban a psr-4 bejegyzést:
"autoload": { "psr-4": { "Shape\\": "src/Shape" } },
Futtassuk a composer dump-autoload parancsot, hogy frissítse a vendor könyvtárban található autoload.php fájlt:
composer dump-autoload
Ha valamit változtatunk az autoload szekción, akkor futtassuk ezt a parancsot.
Írjuk meg a Triangle osztályt, a Shape könyvtáron belül:
<?php namespace Shape; class Triangle { public static function calcArea($base, $height) { return $base * $height / 2; } }
A fájl útvonala így:
src/Shape/Triangle.php
Készítsünk hozzá egy tesztet:
<?php require_once __DIR__.'/../vendor/autoload.php'; use Shape\Triangle; echo Triangle::calcArea(30, 35) . "\n";
Végezzük el tesztet:
php tests/testTriangle.php
A tesztet megnézhetjük PHP szerveren is:
php -S localhost:8000 -t tests
A böngészőbe írjuk:
localhost:8000/testTriangle.php
Írjunk scriptet, ami elvégzi tesztet. Szerkesszük a composer.json fájlt. Adjuk hozzá a következő részt:
"scripts": { "test": ["php tests/test.php", "echo Teszt indul"] }
A composer.json teljes tartalma most:
{ "name": "janos/lap", "description": "Teszt weblap", "autoload": { "psr-0": { "HelloWorld": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "minimum-stability": "dev", "require": { "php": ">=5.5.0" }, "scripts": { "test": ["echo Teszt indul", "php tests/testTriangle.php"] } }
A teszt indítás most:
composer run test
Időzítőt szeretnénk a fejlesztési idő alatt használni. Szeretnénk megmérni mennyi ideig tart a futás. Telepítsük ehhez a phpunit/php-timer csomagot:
composer require --dev phpunit/php-timer
Írjuk át a testTriangle.php állományunkat a használathoz:
<?php require_once __DIR__.'/../vendor/autoload.php'; use Shape\Triangle; use SebastianBergmann\Timer\Timer; $timer = new Timer; $timer->start(); echo Triangle::calcArea(30, 35) . "\n"; $duration = $timer->stop(); print $duration->asSeconds() . "\n";
Futtassuk újra a tesztet:
composer run test
A kimenet most ehhez hasonló:
> echo Teszt indul Teszt indul > php tests/testTriangle.php 525 0.000203483
A vendor könyvtár és a composer.lock fájl tartalmát nem szeretnénk tárolni, ezért írjuk be őket a .gitignore fájlba.
vendor composer.lock
git init git add src tests composer.json git commit -m "Kezdés"
A könyvtárszerkezet most a teljesség igénye nélkül:
haromszog/ |-src/ | `-Shape/ | `-Triangle.php |-test/ | `-testTriangle.php |-vendor/ | |-composer/ | `-autoload.php `-composer.json
A phpunit/phpunit csomagot fogjuk használni:
composer require --dev phpunit/phpunit
A testTriangle.php fájl most békén hagyjuk, és helyett egy TriangleTest.php fájlt készítünk.
require_once __DIR__.'/../vendor/autoload.php'; use Shape\Triangle; use PHPUnit\Framework\TestCase; class TriangleTest extends TestCase { public function testCalcArea() { $triangle = new Triangle(); $this->assertEquals(525, $triangle->calcArea(30, 35)); } }
A tesztelés előtt nézzük meg milyen phpunit parancsunk van. Ha globálisan telepítve van, nézzük meg:
phpunit --version
Használhatjuk a helyi vendor könyvtárba letöltött változatot is:
./vendor/bin/phpunit
phpunit tests
Vagy:
./vendor/bin/phpunit tests
A keletkezett .phpunit.result.cache fájlnév felvehető a .gitignore fájlba.
A már beállított függőségek telepítése:
composer install
npm install && npm run dev