Migration vers v3

La compatibilité ascendante a été maintenue pour la plupart, mais il y a quelques changements dont vous devez être conscient lors de la migration de v2 à v3.

Comportement de l'output buffering (3.5.0)

Output buffering est le processus par lequel la sortie générée par un script PHP est stockée dans un tampon (interne à PHP) avant d'être envoyée au client. Cela vous permet de modifier la sortie avant qu'elle ne soit envoyée au client.

Dans une application MVC, le Contrôleur est le "gestionnaire" et il gère ce que fait la vue. Avoir une sortie générée en dehors du contrôleur (ou dans le cas de Flight parfois une fonction anonyme) casse le modèle MVC. Ce changement vise à être plus en phase avec le modèle MVC et à rendre le framework plus prévisible et plus facile à utiliser.

Dans v2, l'output buffering était géré d'une manière où il ne fermait pas de manière cohérente son propre tampon de sortie, ce qui rendait les tests unitaires et le streaming plus difficiles. Pour la majorité des utilisateurs, ce changement ne vous affectera peut-être pas réellement. Cependant, si vous affichez du contenu en dehors des callables et des contrôleurs (par exemple dans un hook), vous risquez probablement de rencontrer des problèmes. Afficher du contenu dans des hooks, et avant que le framework ne s'exécute réellement a pu fonctionner par le passé, mais cela ne fonctionnera plus à l'avenir.

Où vous pourriez rencontrer des problèmes

// index.php
require 'vendor/autoload.php';

// juste un exemple
define('START_TIME', microtime(true));

function hello() {
    echo 'Bonjour le monde';
}

Flight::map('hello', 'hello');
Flight::after('hello', function(){
    // cela fonctionnera en réalité
    echo '<p>Cette phrase Bonjour le monde vous est offerte par la lettre "B"</p>';
});

Flight::before('start', function(){
    // des choses comme celle-ci provoqueront une erreur
    echo '<html><head><title>Ma page</title></head><body>';
});

Flight::route('/', function(){
    // tout va bien en réalité
    echo 'Bonjour le monde';

    // Cela devrait également bien fonctionner
    Flight::hello();
});

Flight::after('start', function(){
    // cela provoquera une erreur
    echo '<div>Votre page s'est chargée en '.(microtime(true) - START_TIME).' secondes</div></body></html>';
});

Activation du comportement de rendu v2

Pouvez-vous conserver votre ancien code tel qu'il est sans le réécrire pour le faire fonctionner avec v3 ? Oui, vous le pouvez ! Vous pouvez activer le comportement de rendu v2 en définissant l'option de configuration flight.v2.output_buffering sur true. Cela vous permettra de continuer à utiliser l'ancien comportement de rendu, mais il est recommandé de le corriger à l'avenir. Dans la v4 du framework, cela sera supprimé.

// index.php
require 'vendor/autoload.php';

Flight::set('flight.v2.output_buffering', true);

Flight::before('start', function(){
    // Maintenant cela fonctionnera parfaitement
    echo '<html><head><title>Ma page</title></head><body>';
});

// plus de code

Changements du Dispatcher (3.7.0)

Si vous avez directement appelé des méthodes statiques pour Dispatcher telles que Dispatcher::invokeMethod(), Dispatcher::execute(), etc. vous devrez mettre à jour votre code pour ne pas appeler directement ces méthodes. Dispatcher a été converti pour être plus orienté objet afin que les conteneurs d'injection de dépendance puissent être utilisés plus facilement. Si vous devez invoquer une méthode similaire à ce que Dispatcher faisait, vous pouvez utiliser manuellement quelque chose comme $result = $class->$method(...$params); ou call_user_func_array() à la place.