Zend Framework 1: migracja na Composera

Dzisiaj zagadnął mnie kolega na temat aplikacji napisanej w Zend Framework 1. Musi przenieść ją na nowy serwer, ale nie bardzo wie, jak rozwiązać temat zależności. Postanowiłem pomóc mu w postaci wpisu na blogu. Dodam, że kolega nie jest programistą, więc niniejszy wpis postaram się popełnić najprzystępniej jak to możliwe.

Dzisiaj zagadnął mnie kolega na temat aplikacji napisanej w Zend Framework 1. Musi przenieść ją na nowy serwer, ale nie bardzo wie, jak rozwiązać temat zależności. Postanowiłem pomóc mu w postaci wpisu na blogu. Dodam, że kolega nie jest programistą, więc niniejszy wpis postaram się popełnić najprzystępniej jak to możliwe.

Od razu zaznaczam, że przedstawione metody działania da się uprościć jeśli ktoś wie, o co chodzi. Nie jest jednak moim celem przygotowywanie smaczków w stylu aliasu do pliku Composera - to temat na zupełnie inny post. Tu będzie krótko i na temat.

Zacznijmy od tego, że w zamierzchłych czasach świetności ZF1 nie było jeszcze Composera, a przynajmniej nie był on narzędziem popularnym. Zależności aplikacji (czyli biblioteka ZF1) musiały więc znaleźć się w jakimś miejscu, które będzie dostępne bez jakiejś specjalnej magii dla poleceń require_once i podobnych. Nie wiem, czy wszyscy rozwiązywali to w ten sam sposób, ale ja najczęściej spotykałem się z mykiem polegającym na wrzuceniu biblioteki gdzieś „na serwer” (w dowolne miejsce, ale poza obrębem aplikacji) i na dopisaniu ścieżki do tegoż miejsca przechowywania bibliotek do php.ini. Było to o tyle fajne, że ile by się aplikacji nie odpaliło, wszystkie korzystały z jednej biblioteki (a ta waży swoje). Minusem był brak możliwości używania różnych wersji biblioteki przez różne aplikacje, ale cóż, coś za coś.

W dzisiejszych czasach jest Composer. Co to jest? W skrócie, Composer to menedżer zależności PHP. W obrębie danej aplikacji instruujemy go, z jakich bibliotek chcemy korzystać, a on nam te biblioteki sam pobierze. Minusem jest oczywiście ilość miejsca, jakiej potrzebujemy, bo przecież każda aplikacja trzyma swój własny zestaw zależności. Ale z drugiej strony nie musimy się martwić konfliktami wersji, czy sytuacją, gdy upgrade biblioteki do nowszej wersji sprawi, że zupełnie inna aplikacja przestanie nam działać (a byłem świadkiem czegoś takiego).

Jeśli zatem mamy aplikację napisaną w ZF1 i chcemy ją zmigrować na inny serwer, to warto od razu użyć Composera. Zacznijmy od szybkiej informacji na temat instalacji narzędzia dla naszej aplikacji. Na stronie projektu znajduje się instrukcja. Postępujemy zgodnie z nią, w skrócie to jest coś takiego:

  1. Odpalamy terminal (pod Windowsem będzie to cmd, ewentualnie jak ktoś używa Cygwina albo Git Basha, to jak najbardziej można ich użyć).
  2. Przechodzimy do katalogu, w którym znajduje się kod aplikacji (uwaga: do katalogu głównego, nie do podkatalogu application).
  3. Używamy następującej komendy:

    php -r "readfile('https://getcomposer.org/installer');" | php
    

    Stworzy to w bieżącym katalogu wykonywalny plik composer.phar.

  4. Inicjujemy plik konfiguracyjny Composera następującym poleceniem:

    composer.phar init
    
  5. Odpowiadamy na serię pytań (jak ktoś nie do końca kuma, co to w ogóle za informacje, to wystarczy naciskać enter do skutku - użyte zostaną wartości domyślne).

    Stworzy nam to plik composer.json w bieżącym katalogu

W tym momencie dla naszej aplikacji mamy już zainstalowanego Composera i zainicjalizowany plik konfiguracyjny. Możemy teraz dodać interesującą nas zależność, czyli Zend Framework. Robimy to następującym poleceniem:

composer.phar require zendframework/zendframework1

Chwilkę potrwa zanim zależność zostanie pobrana (waży toto bodaj nieco ponad 100MB), ale po chwili w katalogu aplikacji pojawi się nowy podkatalog o nazwie vendor. W nim znajdziemy ZF1. Teraz musimy poinformować aplikację, że takie coś się u nas pojawiło, ładując autoloader Composera. Otwieramy sobie główny plik aplikacji (zwykle będzie to public/index.php) i wyszukujemy w nim linię ładującą aplikację ZF. Wygląda ona następująco:

require_once 'Zend/Application.php';

Bezpośrednio przed nią dopisujemy taką linię:

require_once __DIR__ . "/../vendor/autoload.php";

Projekt przygotowany w ten sposób będzie działał na vhoście przygotowanym pod aplikację ZF z poprzednią architekturą, więc tu już zmian wprowadzać nie trzeba. Dodatkowym plusem jest to, że jeśli będą nam potrzebne dodatkowe zależności, wystarczy je zaciągnąć Composerem i od razu staną się dostępne (dlatego, że załadowaliśmy autoloader).


Napisz komentarz


Szukaj wpisów


Chmura tagów