Le contexte

En migrant un projet vers PHP 8.4, plusieurs choses qui passaient en local ont explosé au déploiement sur mon VPS Ubuntu.

Bug 1 — Paramètres nullable implicites

PHP 8.4 déprécie les nullables implicites :

// Deprecated sur PHP 8.4
public function toHtml(string $content = null): string

// Correct
public function toHtml(?string $content = null): string

Rector automatise la reprise de toute la base de code :

vendor/bin/rector process src --dry-run

Bug 2 — Datetime et fuseau horaire

Sur le VPS, les dates ressortaient avec un fuseau différent du local. La règle qui sauve : stocker en UTC, convertir à l'affichage.

# config/packages/doctrine.yaml
doctrine:
    dbal:
        server_version: '8.4'
{{ post.publishedAt|date('d M Y', 'Europe/Paris') }}

Bug 3 — Le cache prod révèle tout

APP_ENV=dev masque des erreurs de compilation de conteneur. Toujours tester en prod avant de pousser :

php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
composer dump-autoload --optimize --no-dev

C'est le warmup prod qui a fait remonter un service non instanciable que dev tolérait via lazy-loading.

Ce que je retiens

  • Toujours tester avec APP_ENV=prod avant de déployer.
  • Rector est indispensable pour les montées de version PHP.
  • Fuseau horaire : stocker en UTC, convertir à l'affichage. Toujours.