Felhasználói eszközök

Eszközök a webhelyen


oktatas:web:composer:projekt_keszites

< Composer

Composer projekt készítés

Bevezetés

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:

Projekt előkészítése

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';

Használat

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:

Shape/Triangle.php
<?php
 
namespace Shape;
 
class Triangle {
    public static function calcArea($base, $height) {
        return $base * $height / 2;
    }
}

A fájl útvonala így:

src/Shape/Triangle.php

Teszt írása

Készítsünk hozzá egy tesztet:

testTriangle.php
<?php
 
require_once __DIR__.'/../vendor/autoload.php';
 
use Shape\Triangle;
 
echo Triangle::calcArea(30, 35) . "\n";

Teszt futtatása

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

Script írása

Í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:

composer.json
{
    "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

Külső függőség használata

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:

src/Shape/testTriangle.php
<?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

Verziókövetés

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.

.gitignore
vendor
composer.lock
git init
git add src tests composer.json
git commit -m "Kezdés"

Könyvtárszerkezet

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

PHP Unit teszt

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.

Triangletest.php
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

A teszt futtatása

phpunit tests

Vagy:

./vendor/bin/phpunit tests

A keletkezett .phpunit.result.cache fájlnév felvehető a .gitignore fájlba.

Függőségek telepítése

A már beállított függőségek telepítése:

composer install
npm install && npm run dev

Források

oktatas/web/composer/projekt_keszites.txt · Utolsó módosítás: 2021/10/23 20:21 szerkesztette: admin