Guide de mise à niveau 1.6

Avant la mise à niveau, veuillez effectuer une sauvegarde et exécuter les commandes suivantes

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

Publication de la version 1.6.0 de webman-framework

Nouvelles fonctionnalités

Nécessite PHP>=8.0

Support pour obtenir des 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éder à /user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar renverra le résultat

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

De plus, les paramètres peuvent être liés à des classes, y compris des modèles, par exemple

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

Pour plus de détails, consultez lien de 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(...); ajouter des middlewares aux requêtes 4xx

Normalement, une requête 404 ne passe par aucun middleware. À partir de la version 1.6.0, il est possible d'ajouter des middlewares aux 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() désactiver les routes par défaut pour certaines applications ou contrôleurs

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

Pour plus de documentation

Support pour $request->setGet() $request->setPost() $request->setHeader() remplacer les données get, post et headers

$request->get(); // Supposons que nous obtenons ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Finalement, nous obtenons ['name' => 'tom']
// Similaire pour les deux suivants
$requset->setPost();
$request->setHeaders();

Pour plus de documentation

view() supporte l'omission des paramètres de modèle et des chemins absolus

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

Autres changements de configuration et de fichiers

Dans la nouvelle version, les configurations comme listen dans le fichier config/server.php ont été déplacées dans le fichier config/process.php, cela n'affecte que les nouveaux projets créés avec composer create-project, la mise à niveau des anciens projets n'est pas affectée.
La nouvelle version a déplacé le répertoire process sous app/process, ce qui n’affecte également que les nouveaux projets créés avec composer create-project, la mise à niveau des anciens projets n'est pas affectée.

Remarques sur la mise à niveau

Si le code du projet précédent n'est pas très standard, il peut y avoir quelques problèmes de compatibilité, les principaux problèmes sont les suivants :

Vérification de l'utilisation de la fonction view()

Vérifiez si le projet à mettre à niveau utilise view() avec des paramètres de modèle commençant par /. Si c'est le cas, retirez le / au début, par exemple

return view('/user/index');
// Doit être changé en
return view('user/index');

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

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// Doit être changé en
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

Notez que le paramètre $request doit être précédé d'une indication de type Request.

Désactivation du proxy composer

Les miroirs composer comme Aliyun peuvent avoir des délais, et les versions des paquets peuvent ne pas être les plus récentes, ce qui peut causer des problèmes de mise à niveau. Veuillez exécuter la commande suivante pour supprimer le proxy composer, puis procéder à la mise à niveau.

composer config -g --unset repos.packagist