Jak migrovat Laminas projekt z PHP 7 na PHP 8.0

Laminas je PHP framework, nástupce Zend Framework 3. Vývoj ZF 3 byl ukončen v roce 2019, našstěstí Laminas vývoj běží dál a nyní je k dispozici již funkční verze pro PHP 8.0.

Instalace čistého projektu se řeší přes Lamins CLI. Ale u stávajících projektů jsem nikde návod na upgrade pro Laminas nenašel. Proto jsem si to zkusil přes composer sám.

1. Úprava souboru composer.json

Přidat/upravit konfiguraci platformy v souboru composer.json v root adresáři projektu.

"config": {
"platform": {
"php": "8.0.10"
}
},

2. Vytvoření lokálního nginx serveru s PHP 8.0.10 FPM přes Docker

V Dockeru jsem si ukuchtil jednoduchý Dockefile s PHP 8.0.10 spustitelný v nginx přes Docker compose.

FROM php:8.0.10-fpm

RUN apt-get update && apt-get upgrade -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpq-dev \
    libmagickwand-dev \
    libmcrypt-dev \
    libmcrypt-dev \
    libpng-dev \
    libmemcached-dev \
    libssl-dev \
    libssl-doc \
    libsasl2-dev \
    zlib1g-dev \
    libicu-dev \
    g++ \
    libxml2-dev \
    libonig-dev \
    libzip-dev \
    && pear install -a SOAP-0.13.0 \
    && docker-php-ext-install \
        iconv \
        mbstring \
        mysqli \
        pdo_mysql \
        sysvsem \
        sysvshm \
        sysvmsg \
        soap \
        zip \
    && docker-php-ext-configure intl  \
    && docker-php-ext-install intl \
    && pecl install memcached && docker-php-ext-enable memcached \
    && yes '' | pecl install imagick && docker-php-ext-enable imagick

Takže přidám si Dockerfile do projektu v PhpStorm do složky /docker (do nového adresáře) a nastavím k němu cestu v souboru docker-compose.yml.

    php:
        build:
            context: ./
            dockerfile: docker/php/8.0.10fpm/Dockerfile

V terminálu spustím vytvoření kontejneru příkazem „docker-compose build“. Zahlásí successfully, pokud ne, tak bude třeba upravit Dockerfile.

3. Update composer balíčků v projektu

příkaz: „docker-compose run php php composer.phar update“ vyhodí problémy s kompatibilitou balíčkou Laminas

Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

3.1 Problém laminas-cache-storage-adapter-apc require php ^5.6 || ^7.0

Problem 1
– laminas/laminas-cache-storage-adapter-apc[1.0.0, …, 1.1.x-dev] require php ^5.6 || ^7.0 -> your php version (8.0.10; overridden via config.platform, same as actual) does not satisfy that requirement.
– laminas/laminas-cache 2.13.0 requires laminas/laminas-cache-storage-adapter-apc ^1.0 -> satisfiable by laminas/laminas-cache-storage-adapter-apc[1.0.0, 1.0.1, 1.0.x-dev, 1.1.x-dev].
– Root composer.json requires laminas/laminas-cache 2.13.0 -> satisfiable by laminas/laminas-cache[2.13.0].

Řešení je zde https://stackoverflow.com/questions/68987059/laminas-cache-2-13-php8-upgrade.

Prostě nahradit verze wildcard * u verze laminas-cache 2.13.

"laminas/laminas-cache": "^2.13"
"replace": {
    "laminas/laminas-cache-storage-adapter-apc": "*",
    "laminas/laminas-cache-storage-adapter-dba": "*",
    "laminas/laminas-cache-storage-adapter-mongodb": "*",
    "laminas/laminas-cache-storage-adapter-wincache": "*",
    "laminas/laminas-cache-storage-adapter-xcache": "*",
    "laminas/laminas-cache-storage-adapter-zend-server": "*"
},

3.2 Problém Laminas Console byl nahrazen Lamins CLI

laminas/laminas-test[3.5.0, …, 3.5.1] require laminas/laminas-console ^2.6 -> satisfiable by laminas/laminas-console[2.6.0, 2.7.0, 2.8.0].

Problém vyřešen přechodem na dev verzi laminas-test 4. Verze 3 neumí PHP 8.

"laminas/laminas-test": "^4.0.x-dev",

3.3 Problém Facebook SDK (není součást Laminas) nepodporuje PHP 8

Facebook SDK používám pro příhlášení přes Facebook.

facebook/graph-sdk 5.7.0 requires php ^5.4|^7.0 -> your php version (8.0.10; overridden via config.platform, same as actual) does not satisfy that requirement.

Ano, Facebook login SDK neumí PHP 8 a ani nebude umět, protože již balíček není podporován. Tento problém řeší přechod na https://github.com/thephpleague/oauth2-facebook. Tj. nahradit řádek

"facebook/graph-sdk": "^5.7",
za
"league/oauth2-facebook": "^2.0"

Spuštení Dockeru

Hotovo. Už jen spustit nové PHP příkazem: „docker-compose up -d“ a Laminas projekt mám zmigrován.