PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Projekt obiektowy - internetowy notes > Lekcja 1

Composer

Rozpoczniemy od przygotowania Composera. Dzięki niemu możemy łatwo używać w naszym projekcie zewnętrznych bibliotek napisanych przez inne osoby (znajdziesz je wszystkie na stronie packagist.org), ale także skorzystać z automatycznego ładowania klas.

No i?

To tyle - tak mało, a jednocześnie tak dużo. W obecnej chwili Composer jest właściwie standardem - nie wyobrażam sobie, aby programista PHP mógł go nie znać. Przedstawię teraz przykład wybiegający nieco do przodu, ale bardziej praktyczny, abyś mógł zrozumieć co Ci to tak naprawdę da.

Większość projektów tworzonych jest przy użyciu systemów kontroli wersji, na przykład Gita. W takim repozytorium przechowywany jest cały kod projektu (bez zewnętrznych bibliotek) oraz tylko plik konfiguracyjny dla Composera. W celu pobrania wszystkich potrzebnych bibliotek i ich zależności wydajemy jedno polecenie i już! Mamy wszystko czego potrzebujemy. Poza tym zmieniają się przecież wersje poszczególnych bibliotek, poszczególne pakiety mają swoje wymagania i wymagają innych... Zapanowanie nad tym byłoby po prostu bardzo ciężkie, a przechowywanie zawsze wszystkich plików potrzebnych bibliotek - kłopotliwe. Stąd właśnie Composer, który znacznie to wszystko ułatwia.

Instalacja

Najlepiej będzie, jeśli zainstalujemy Composer tak, aby był dostępny globalnie. Dzięki temu będziemy mogli użyć go w każdym projekcie. Aby to zrobić wystarczy umieścić plik wykonywalny w jednej z lokalizacji dostępnej w zmiennej środowiskowej PATH lub ewentualnie dodać tam swoją lokalizację.

Najprostszy jak dla mnie sposób to pobranie jego ostatniej wersji, na przykład przy użyciu programu wget. Ostatnia wydana wersja znajduje się zawsze pod adresem: https://getcomposer.org/composer.phar. Możemy zrobić to tak:

wget nieznane polecenie / wget not found

Jeśli przy próbie użycia wget dostaniesz informację, że system nie znalazł takiego polecenia to znaczy, że po prostu nie masz zainstalowanego tego programu. Aby to zrobić wystarczy wydać proste polecenie apt install wget. Możesz też skorzystać z innego programu lub pobrać i przenieść ten plik w trybie graficznym. W kursie jednak unikam takich metod - im więcej nauczysz się teraz pracy w konsoli, tym lepiej dla Ciebie.

wget pobiera plik, a dzięki dodaniu parametru -O od razu przenosi go pod wskazaną lokalizację i ustawia podaną nazwę (pozbywamy się rozszerzenia .phar, aby nie trzeba było podawać go przy każdym wywołaniu). Jest to jedna ze ścieżek dostępna we wspomnianej wcześniej zmiennej PATH, a więc Composer będzie dostępny globalnie. Na koniec nadajemy uprawnienia wykonania dla tego pliku. I gotowe!

Composer nam więc działa, widzisz też od razu listę dostępnych komend.

Jeśli chodzi o inne sposoby instalacji to można też zrobić to poprzez oficjalny skrypt instalacyjny, który weryfikuje wymagania, jednak osobiście nie miałem nigdy problemu z przedstawioną powyżej instalacją, a wydaje mi się po prostu szybsza. A jeśli korzystasz z Windowsa, to na stronie Composera dostępny jest instalator w formacie exe.

Krótkie wprowadzenie

Najbardziej podstawowym poleceniem jest require. Umożliwia ono pobranie pakietu wraz ze wszystkimi potrzebnymi zależnościami. Zainstalujmy Twiga, który przyda nam się później jako system szablonów. Wydajemy polecenie: composer require twig/twig:^2.0.

Po jego wykonaniu w katalogu projektu stworzony zostanie folder vendor zawierający wszystkie zależności. Możesz z ciekawości przejrzeć co zawiera, jednak zasadniczo nie ma potrzeby, abyś się tym w tej chwili interesował. Pojawią się też dwa pliki tekstowe: composer.json i composer.lock. Ten pierwszy pozostanie w obrębie naszych zainteresowań, drugi nie jest zmieniany ręcznie w zasadzie nigdy - jest to plik generowany przez Composera zawierający potrzebne mu informacje.

Mój composer.json wygląda następująco:

{
    "require": {
        "twig/twig": "^2.0"
    }
}

Wracając do samego polecenia: require oznacza pakiet jako zawsze wymagany (bo jest też require-dev, które oznacza pakiet tylko dla środowiska deweloperskiego, ale o tym kiedy indziej), twig/twig to nazwa pakietu w formacie użytkownik/nazwa. Te oczywiście mogą być różne, w tym przykładzie są identyczne. ^2.0 to oznaczenie wersji. Tę można zapisać na wiele sposobów, zarówno wskazując jedną dokładną, jak i pewien zakres. Jeśli jesteś zainteresowany to w dokumentacji Composera jest cała sekcja na ten temat, a na dole krótsze podsumowanie - na razie nie chciałbym tutaj wchodzić w takie szczegóły. Możesz również wcale nie podać wersji, zostanie wtedy automatycznie dobrana najnowsza możliwa.

Drugim najczęściej używanym poleceniem jest install - composer install. Instaluje ono pakiety i ich zależności zdefiniowane w pliku composer.json. Zastanowisz się być może teraz po co nam osobno install i require, a więc śpieszę wyjaśnić: require używamy, gdy chcemy dopisać nowy pakiet, jest on wtedy dodawany do composer.json i pobierany. Z kolei install użyjemy, gdy chcemy zainstalować to wszystko od zera, inaczej mówiąc gdy właśnie pobraliśmy jakiś projekt, mamy wypełniony composer.json i chcemy pobrać zdefiniowane tam zależności.

Z kolei gdy mamy już zainstalowane pakiety, a chcielibyśmy je zaktualizować - na przykład wydana została kolejna wersja danej biblioteki - możemy skorzystać z polecenia composer update. Tutaj warto zaznaczyć, że Composer nigdy nie wyjdzie poza określoną w konfiguracji wersję. To znaczy, że jeśli ustawimy "na sztywno" wersję 1.0.0, to pomimo wydania kolejnych ta się nie zmieni. Gdy jednak wersja zostanie określona jak w przykładzie Twiga, czyli ^2.0 to pobrana zostanie każda wersja niższa od 3. Tak więc update działa pod naszą pełną kontrolą.

Tworząc nowy projekt możesz też skorzystać z composer init. Polecenie to uruchamia kreator tworzący nowy plik composer.json wraz z podstawowymi danymi. Będą one wymagane w przypadku gdybyś chciał stworzyć własny pakiet i opublikować go, na przykład na wspomnianym już packagist.org. W pozostałych przypadkach nie są konieczne, jednak ich wypełnienie na pewno w niczym nie zaszkodzi. Oczywiście gdy po wygenerowaniu tego pliku użyjemy np. composer require/require-dev plik nie zostanie nadpisany, zależności zostaną tylko dopisane.

Myślę, że to wystarczające informacje na start z Composerem. Nawet jeśli teraz wydaje się nieco zagmatwane, to uwierz, że szybko wejdzie Ci w nawyk i stanie się oczywistością przy pracy w PHP.

Powrót

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze