Guía de Actualización 1.6
Antes de actualizar, asegúrese de hacer una copia de seguridad y ejecute los siguientes comandos para la actualización
composer config -g --unset repos.packagist
composer require -W workerman/webman-framework ^v1.6.11
Lanzamiento de la versión 1.6.0 de webman-framework
Nuevas características
Requiere PHP>=8.0
Soporte para obtener entradas a través de parámetros del 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,
]);
}
}
Accediendo a /user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar
se obtiene el resultado
{
"name": "tom",
"age": 18,
"balance": 100.5,
"vip": true,
"extension": {
"foo": "bar"
}
}
Además, los parámetros admiten el enlace a clases que incluyen modelos, por ejemplo
<?php
namespace app\controller;
use app\model\User;
class UserController
{
public function create(User $user): int
{
$user->save();
return $user->id;
}
}
Más información en vinculación de parámetros del controlador
Soporte para middleware en controladores
<?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';
}
}
Soporte para Route::fallback()->middleware(...); para añadir middleware a solicitudes 4xx
Normalmente, las solicitudes 404 no ejecutan ningún middleware. A partir de la versión 1.6.0, se pueden establecer middleware para las solicitudes 4xx
Route::fallback(function(){
return json(['code' => 404, 'msg' => '404 not found']);
})->middleware([
app\middleware\MiddlewareA::class,
app\middleware\MiddlewareB::class,
]);
Soporte para Route::disableDefaultRoute() para desactivar la ruta predeterminada de aplicaciones o controladores específicos
// Desactivar la ruta predeterminada del proyecto principal, sin afectar los complementos de la aplicación
Route::disableDefaultRoute();
// Desactivar la ruta del complemento admin del proyecto principal, sin afectar los complementos de la aplicación
Route::disableDefaultRoute('', 'admin');
// Desactivar la ruta predeterminada del complemento foo, sin afectar el proyecto principal
Route::disableDefaultRoute('foo');
// Desactivar la ruta predeterminada de la aplicación admin del complemento foo, sin afectar el proyecto principal
Route::disableDefaultRoute('foo', 'admin');
// Desactivar la ruta predeterminada de [\app\controller\IndexController::class, 'index']
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);
Más documentación de referencia
Soporte para $request->setGet() $request->setPost() $request->setHeader() para sobrescribir datos de cabeceras, get y post
$request->get(); // Supongamos que obtenemos ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Finalmente obtenemos ['name' => 'tom']
// Similar para abajo
$requset->setPost();
$request->setHeaders();
Más documentación de referencia
view() admite omitir el parámetro de plantilla y la ruta absoluta
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
// Equivalente a return view('user/hello', ['name' => 'webman']);
// Equivalente a return view('/app/view/user/hello', ['name' => 'webman']);
return view(['name' => 'webman']);
}
}
Otras configuraciones y cambios de archivos
En la nueva versión, las configuraciones como listen del archivo config/server.php se movieron a config/process.php, afectando solo a los nuevos proyectos creados con composer create-project; los proyectos antiguos no se verán afectados.
La nueva versión ha movido el directorio process a app/process, afectando solo a los nuevos proyectos creados con composer create-project; los proyectos antiguos no se verán afectados.
Consideraciones para la actualización
Si el código del proyecto anterior no es muy normativo, puede haber algunos problemas de compatibilidad, principalmente los siguientes:
Verificar el uso de la función view()
Verifique si la función view() en el proyecto que se va a actualizar tiene un parámetro de plantilla que comience con /
, y si es así, elimine la /
inicial, por ejemplo
return view('/user/index');
// Necesita cambiarse a
return view('user/index');
Verificar la consistencia de los parámetros de rutas personalizadas
Route::any('/user/{name}', function (Request $request, $myname) {
return response($myname);
});
// Necesita cambiarse a
Route::any('/user/{name}', function (Request $request, $name) {
return response($name);
});
Tenga en cuenta que se necesita agregar la indicación de tipo Request antes del parámetro $request.
Desactivar el proxy de composer
Los proxies de mirrors de composer como Aliyun tienen retrasos; las versiones de los paquetes allí pueden no estar actualizadas, lo que causa problemas en la actualización. Ejecute el siguiente comando para eliminar el proxy de composer antes de actualizar.
composer config -g --unset repos.packagist