1.6 Upgrade-Anleitung

Bitte sichern Sie Ihre Daten vor dem Upgrade und führen Sie die folgenden Befehle aus

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

webman-framework Version 1.6.0 veröffentlicht

Neue Funktionen

Erfordert PHP>=8.0

Unterstützung der Eingabe über Controller-Parameter

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

Zugriff auf /user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar ergibt folgendes Ergebnis

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

Zusätzlich unterstützen die Parameter auch die Bindung an Klassen, einschließlich Modelle, zum Beispiel

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

Mehr Informationen finden Sie unter Controller-Parameterbindung

Unterstützung von Middleware in Controllern

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

Unterstützung von Route::fallback()->middleware(...); zur Hinzufügung von Middleware für 4xx-Anfragen

Standardmäßig durchläuft eine 404-Anfrage keine Middleware. Ab Version 1.6.0 können Middleware für 4xx-Anfragen festgelegt werden

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

Unterstützung von Route::disableDefaultRoute() zum Deaktivieren bestimmter Standardroute für Anwendungen und Controller

// Deaktivieren der Standardroute des Hauptprojekts, ohne die Anwendungs-Plugins zu beeinflussen
Route::disableDefaultRoute();
// Deaktivieren der Routen der Admin-Anwendung des Hauptprojekts, ohne die Anwendungs-Plugins zu beeinflussen
Route::disableDefaultRoute('', 'admin');
// Deaktivieren der Standardroute des foo-Plugins, ohne das Hauptprojekt zu beeinflussen
Route::disableDefaultRoute('foo');
// Deaktivieren der Standardroute der Admin-Anwendung des foo-Plugins, ohne das Hauptprojekt zu beeinflussen
Route::disableDefaultRoute('foo', 'admin');
// Deaktivieren der Standardroute [\app\controller\IndexController::class, 'index'] 
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

Weitere Dokumentation

Unterstützung von $request->setGet() $request->setPost() $request->setHeader() zum Überschreiben von get, post und Header-Daten

$request->get(); // Angenommen, es ergibt sich ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Endgültig erhalten ['name' => 'tom']
// Ähnlich für die folgenden
$request->setPost();
$request->setHeaders();

Weitere Dokumentation

view() unterstützt das Weglassen von Template-Parametern sowie absoluter Pfade

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

Änderungen an anderen Konfigurationen und Dateien

In der neuen Version wurden die Konfigurationen wie listen in config/server.php in config/process.php verschoben, dies betrifft nur neu mit composer create-project erstellte Projekte, bestehende Projekte sind nicht betroffen.
In der neuen Version wurde das process-Verzeichnis in app/process verschoben, dies betrifft auch nur neu mit composer create-project erstellte Projekte, bestehende Projekte sind nicht betroffen.

Upgrade-Hinweise

Wenn der vorherige Projektcode nicht sehr standardisiert ist, kann es einige Kompatibilitätsprobleme geben, die Hauptprobleme sind wie folgt:

Überprüfen der Verwendung von view() Funktion

Überprüfen Sie, ob im Projekt, das aktualisiert werden soll, view() Template-Parameter mit einem / am Anfang verwendet wird, wenn ja, entfernen Sie das führende /, zum Beispiel

return view('/user/index');
// Muss geändert werden zu
return view('user/index');

Überprüfen der Konsistenz von benutzerdefinierten Routenparametern

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// Muss geändert werden zu
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

Beachten Sie, dass der $request Parameter einen Typ-Hinweis für Request benötigt.

Deaktivieren des Composer-Proxys

Composer-Proxy-Server wie Aliyun haben Verzögerungen, die Versionen der Pakete dort sind möglicherweise nicht die neuesten, was zu Problemen beim Upgrade führen kann. Bitte führen Sie den folgenden Befehl aus, um den Composer-Proxy zu entfernen, bevor Sie das Upgrade durchführen

composer config -g --unset repos.packagist