6 stycznia 2019

Jak rozpocząć projekt z użyciem Composera

Hej, nowy rok, nowy projekt
Jeśli jesteś świeży w branży, musisz wiedzieć że dobrą praktyką jest wykorzystywanie narzędzia zwanego composer.
Poniżej objaśnię, dlaczego.

Composer to narzędzie które umożliwia przy pomocy prostych poleceń ściągnięcie najnowszych wersji bibliotek do naszego projektu. To tak w skrócie, ale najlepiej objaśnią to poniższe przykłady:

Przypadek 1.

Kuba tworzy nowy projekt, korzysta z Bootstrapa i CakePHP. Za pomocą polecenia:

composer create-project --prefer-dist cakephp/app my_app_name

Instaluje całe środowisko CakePHP.

Dodatkowo, za pomocą polecenia:

composer require twbs/bootstrap

Instaluje bibliotekę Bootstrap.

Dzięki narzędziu composer, Kuba nie musi poświęcać czasu na przeszukiwaniu internetu w poszukiwaniu bibliotek, czytać o ich instalacji ponieważ composer ma plik o nazwie autoload.php gdzie trafiają wszystkie biblioteki z których korzystamy.

Przypadek 2.

Kuba posiada swój projekt, wszystkie biblioteki są instalowane przy pomocy composer’a, ale nie ma ich w zdalnym repozytorium. Kuba wysyła link do repo Michałowi aby ten również mógł uczestniczyć przy rozwijaniu projektu.

Michał wpisuje polecenie:

composer install

Instaluje wszystkie potrzebne biblioteki

Przypadek 3.

Kuba pracuje nad projektem w którym korzysta z composera, wie że w trakcie jego prac część bibliotek posiada już swoje nowsze wersje.

Wydaje więc polecenie:

composer update

Ściąga najnowsze wersje wszystkich bibliotek i podmienia nimi starsze wersje.

Uruchamianie skryptów

Composer umożliwia automatycznie uruchamianie skryptów po wykonaniu komendy composera.
Przykładowo, po wpisaniu „composer update” automatycznie composer może załadować nasz skrypt php który wcześniej zadeklarujemy w pliku composer.json

Przykład:

"autoload": {
    "psr-4": {
	"ComposerClass\\ComposerScript\\": ""
     }
},
"scripts": {
     "post-update-cmd": [
	 "ComposerClass\\ComposerScript\\FileClass::copy"
     ]
}

Sekcja autoload służy do załadowania klas. W sekcji scripts wpisujemy jaką funkcję chcemy odpalić w jakiej sytuacji.

Oczywiście skrypt php według powyższego przykładu powinien znaleźć się w głównym katalogu.

Możemy do naszej funkcji przekazać parametry które zadeklarujemy wcześniej w pliku composer.json. Przykład poniżej.

"extra": {
        "copy-file": {
            "vendor/twitter/": "webroot/css",
            "vendor/components/jquery": "webroot/js/jquery"
        }
    }

Oraz plik php:

public static function copy(Event $event)
    {
        $extras = $event->getComposer()->getPackage()->getExtra();

        print_r($extras);
    }

Wynik w terminalu powinien być taki:

Array
(
    [copy-file] => Array
        (
            [vendor/twitter/] => webroot/css
            [vendor/components/jquery] => webroot/js/jquery
        )

)

Korzystanie z bibliotek zainstalowanych za pomocą composera

Ściągnęliśmy przy pomocy composera phpunit i np. facebook sdk.
Teraz należy załadować plik autoload.php

include 'vendor/autoload.php';

Gotowe, możemy dalej działać, więc aby skorzystać z phpunit piszemy:

use PHPUnit\Framework\TestCase;

Aby zacząć korzystać z facebook sdk piszemy:

$fb = new Facebook\Facebook();

Podsumowanie

Zachęcam, jeśli jeszcze nie korzystasz z composera, zacznij. Powyższe przykłady powinny przekonać do composera wszystkich.

Dokumentacja: https://getcomposer.org/doc/

Przykład w git, skrypt do kopiowania plików nie jest mój (oryginalna wersja: https://github.com/slowprog/CopyFile ): https://github.com/rafaldanis/composertest