Migração para a v3
A compatibilidade retroativa foi mantida na maior parte, mas há algumas alterações das quais você deve estar ciente ao migrar da v2 para a v3. Há algumas mudanças que conflitaram demais com padrões de design, então alguns ajustes tiveram que ser feitos.
Comportamento de Buffer de Saída
v3.5.0
Output buffering é o processo onde a saída gerada por um script PHP é armazenada em um buffer (interno ao PHP) antes de ser enviada ao cliente. Isso permite que você modifique a saída antes de ela ser enviada ao cliente.
Em uma aplicação MVC, o Controller é o "gerenciador" e ele gerencia o que a view faz. Ter saída gerada fora do controller (ou no caso do Flight, às vezes uma função anônima) quebra o padrão MVC. Essa mudança é para estar mais alinhada com o padrão MVC e tornar o framework mais previsível e fácil de usar.
Na v2, o output buffering era tratado de uma forma onde não fechava consistentemente seu próprio buffer de saída, o que tornava testes unitários e streaming mais difíceis. Para a maioria dos usuários, essa mudança pode não afetá-lo de fato. No entanto, se você estiver ecoando conteúdo fora de callables e controllers (por exemplo, em um hook), você provavelmente vai encontrar problemas. Ecoar conteúdo em hooks, e antes do framework realmente executar, pode ter funcionado no passado, mas não funcionará daqui para frente.
Onde você pode ter problemas
// index.php
require 'vendor/autoload.php';
// apenas um exemplo
define('START_TIME', microtime(true));
function hello() {
echo 'Hello World';
}
Flight::map('hello', 'hello');
Flight::after('hello', function(){
// isso na verdade estará bem
echo '<p>This Hello World phrase was brought to you by the letter "H"</p>';
});
Flight::before('start', function(){
// coisas como essa causarão um erro
echo '<html><head><title>My Page</title></head><body>';
});
Flight::route('/', function(){
// isso na verdade está apenas bem
echo 'Hello World';
// Isso também deve estar bem
Flight::hello();
});
Flight::after('start', function(){
// isso causará um erro
echo '<div>Your page loaded in '.(microtime(true) - START_TIME).' seconds</div></body></html>';
});
Ativando o Comportamento de Renderização da v2
Você ainda pode manter seu código antigo como está sem fazer uma reescrita para torná-lo compatível com a v3? Sim, você pode! Você pode ativar o
comportamento de renderização da v2 definindo a opção de configuração flight.v2.output_buffering
como true
. Isso permitirá que você continue a
usar o antigo comportamento de renderização, mas é recomendado corrigi-lo daqui para frente. Na v4 do framework, isso será removido.
// index.php
require 'vendor/autoload.php';
Flight::set('flight.v2.output_buffering', true);
Flight::before('start', function(){
// Agora isso estará bem
echo '<html><head><title>My Page</title></head><body>';
});
// mais código
Mudanças no Dispatcher
v3.7.0
Se você tiver chamado diretamente métodos estáticos para Dispatcher
, como Dispatcher::invokeMethod()
, Dispatcher::execute()
, etc.
você precisará atualizar seu código para não chamar diretamente esses métodos. O Dispatcher
foi convertido para ser mais orientado a objetos, de modo
que Contêineres de Injeção de Dependência possam ser usados de forma mais fácil. Se você precisar invocar um método de forma similar ao que o Dispatcher fazia, você
pode usar manualmente algo como $result = $class->$method(...$params);
ou call_user_func_array()
em vez disso.
Mudanças em halt()
stop()
redirect()
e error()
v3.10.0
O comportamento padrão antes da 3.10.0 era limpar tanto os headers quanto o corpo da resposta. Isso foi alterado para limpar apenas o corpo da resposta.
Se você precisar limpar os headers também, você pode usar Flight::response()->clear()
.