Guia de Atualização 1.6
Antes de atualizar, faça um backup e execute o seguinte comando para atualizar
composer config -g --unset repos.packagist
composer require -W workerman/webman-framework ^v1.6.11
webman-framework versão 1.6.0 lançada
Novos Recursos
Requer PHP>=8.0
Suporte à captura de entrada através de parâmetros do controlador
<?php
namespace app\controller;
use support\Response;
class UserController
{
public function create(string $name, int $age, float $balance, bool $vip, array $extension): Response
{
return json([
'name' => $name,
'age' => $age,
'balance' => $balance,
'vip' => $vip,
'extension' => $extension,
]);
}
}
Acessando /user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar
obtém-se o resultado
{
"name": "tom",
"age": 18,
"balance": 100.5,
"vip": true,
"extension": {
"foo": "bar"
}
}
Além disso, os parâmetros suportam a vinculação a classes, incluindo modelos, por exemplo:
<?php
namespace app\controller;
use app\model\User;
class UserController
{
public function create(User $user): int
{
$user->save();
return $user->id;
}
}
Mais referências em vinculação de parâmetros do controlador
Suporte a middleware do controlador
<?php
namespace app\controller;
use app\middleware\MiddlewareA;
use app\middleware\MiddlewareB;
use support\Request;
class IndexController
{
protected $middleware = [
MiddlewareA::class,
MiddlewareB::class,
];
public function index(Request $request): string
{
return 'hello';
}
}
Suporte a Route::fallback()->middleware(...); para adicionar middleware a requisições 4xx
Normalmente, requisições 404 não passam por nenhum middleware. A partir da versão 1.6.0, é possível configurar middleware para requisições 4xx.
Route::fallback(function(){
return json(['code' => 404, 'msg' => '404 not found']);
})->middleware([
app\middleware\MiddlewareA::class,
app\middleware\MiddlewareB::class,
]);
Suporte a Route::disableDefaultRoute() para desativar rotas padrão de aplicativos ou controladores específicos
// Desativa a rota padrão do projeto principal, sem afetar plugins da aplicação
Route::disableDefaultRoute();
// Desativa as rotas do aplicativo admin do projeto principal, sem afetar plugins da aplicação
Route::disableDefaultRoute('', 'admin');
// Desativa a rota padrão do plugin foo, sem afetar o projeto principal
Route::disableDefaultRoute('foo');
// Desativa a rota padrão do aplicativo admin do plugin foo, sem afetar o projeto principal
Route::disableDefaultRoute('foo', 'admin');
// Desativa a rota padrão do controlador [\app\controller\IndexController::class, 'index']
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);
Mais documentação de referências
Suporte a $request->setGet() $request->setPost() $request->setHeader() para sobrescrever dados de headers get post
$request->get(); // Supondo que obtenha ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Finalmente obtém ['name' => 'tom']
// Similar para os seguintes
$requset->setPost();
$request->setHeaders();
Mais documentação de referências
view() suporta omissão do parâmetro de template e caminho absoluto
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
// Equivale a return view('user/hello', ['name' => 'webman']);
// Equivale a return view('/app/view/user/hello', ['name' => 'webman']);
return view(['name' => 'webman']);
}
}
Outras mudanças de configuração e arquivo
Na nova versão, as configurações como listen no arquivo config/server.php foram movidas para config/process.php, afetando apenas novos projetos criados com composer create-project
, não afetando atualizações de projetos antigos.
A nova versão moveu o diretório process para app/process, afetando apenas novos projetos criados com composer create-project
, não afetando atualizações de projetos antigos.
Atenções na atualização
Se o código do projeto anterior não for muito padrão, pode haver alguns problemas de compatibilidade, os principais problemas são os seguintes:
Verifique o uso da função view()
Verifique se o projeto a ser atualizado contém parâmetros de template para view() que começam com /
. Se houver, remova a barra inicial, por exemplo:
return view('/user/index');
// Necessita ser alterado para
return view('user/index');
Verifique se os parâmetros de rota personalizada são consistentes
Route::any('/user/{name}', function (Request $request, $myname) {
return response($myname);
});
// Necessita ser alterado para
Route::any('/user/{name}', function (Request $request, $name) {
return response($name);
});
Note que é necessário adicionar a tipagem de Request antes do parâmetro $request.
Desativar proxy do composer
O proxy de espelhos do composer, como o da Alibaba Cloud, pode ter latência, e as versões dos pacotes podem não ser as mais recentes, causando problemas de atualização. Execute o seguinte comando para remover o proxy do composer e, em seguida, atualize.
composer config -g --unset repos.packagist