Guide de mise à niveau 1.6

Veuillez faire une sauvegarde avant la mise à niveau et exécuter les commandes suivantes

composer config -g --unset repos.packagist
composer require -W workerman/webman-framework ^v1.6.11

Version webman-framework 1.6.0

Nouvelles fonctionnalités

Nécessite PHP>=8.0

Support pour récupérer les entrées via les paramètres du contrôleur

<?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,
        ]);
    }
}

Accédez à /user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar pour obtenir le résultat

{
  "name": "tom",
  "age": 18,
  "balance": 100.5,
  "vip": true,
  "extension": {
    "foo": "bar"
  }
}

Les paramètres supportent également la liaison aux classes incluant les modèles

<?php
namespace app\controller;
use app\model\User;
class UserController
{
    public function create(User $user): int
    {
        $user->save();
        return $user->id;
    }
}

Voir Liaison des paramètres du contrôleur

Support des middlewares de contrôleur

<?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';
    }
}

Support pour Route::fallback()->middleware(...) pour les requêtes 4xx

Normalement les requêtes 404 ne passent par aucun middleware. À partir de la version 1.6.0, vous pouvez définir des middlewares pour les requêtes 4xx

Route::fallback(function(){
    return json(['code' => 404, 'msg' => '404 not found']);
})->middleware([
    app\middleware\MiddlewareA::class,
    app\middleware\MiddlewareB::class,
]);

Support pour Route::disableDefaultRoute() pour désactiver les routes par défaut

// Désactiver les routes par défaut du projet principal
Route::disableDefaultRoute();
// Désactiver les routes de l'application admin
Route::disableDefaultRoute('', 'admin');
// Désactiver les routes par défaut du plugin foo
Route::disableDefaultRoute('foo');
// Désactiver les routes admin du plugin foo
Route::disableDefaultRoute('foo', 'admin');
// Désactiver la route par défaut du contrôleur [\app\controller\IndexController::class, 'index']
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

Documentation

Support pour $request->setGet() $request->setPost() $request->setHeader()

$request->get(); // Supposons ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Résultat final ['name' => 'tom']
// Idem pour
$request->setPost();
$request->setHeaders();

Documentation

view() supporte l'omission du paramètre template et les chemins absolus

<?php
namespace app\controller;
use support\Request;
class UserController
{
    public function hello(Request $request)
    {
        return view(['name' => 'webman']);
    }
}

Autres changements de configuration et fichiers

Dans la nouvelle version, la configuration listen de config/server.php a été déplacée vers config/process.php. Affecte uniquement les nouveaux projets.
Le répertoire process a été déplacé vers app/process. Affecte uniquement les nouveaux projets.

Notes de mise à niveau

Si le code du projet n'était pas très standardisé, des problèmes de compatibilité peuvent survenir :

Vérifier l'utilisation de view()

Vérifiez si view() utilise des paramètres de template commençant par /. Si oui, supprimez le /

return view('/user/index');
// Changer en
return view('user/index');

Vérifier la cohérence des paramètres de route personnalisés

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// Changer en
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

Remarque : Ajouter le type hint Request avant le paramètre $request.

Désactiver le proxy Composer

Les miroirs Composer comme Aliyun ont des délais. Exécutez avant la mise à niveau :

composer config -g --unset repos.packagist