Upgrade-Anleitung 1.6

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

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

webman-framework 1.6.0 Release

Neue Funktionen

Erfordert PHP>=8.0

Unterstützung für 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 liefert das Ergebnis

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

Parameter unterstützen auch die Bindung an Klassen inkl. Modelle

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

Weitere Informationen: Controller-Parameter-Bindung

Controller-Middleware-Unterstützung

<?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 für Route::fallback()->middleware(...) für 4xx-Anfragen

Normalerweise durchlaufen 404-Anfragen keine Middleware. Ab Version 1.6.0 können Sie für 4xx-Anfragen Middleware setzen

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

Unterstützung für Route::disableDefaultRoute() zum Deaktivieren standardmäßiger Routen

// Standardrouten des Hauptprojekts deaktivieren
Route::disableDefaultRoute();
// admin-App des Hauptprojekts deaktivieren
Route::disableDefaultRoute('', 'admin');
// Standardrouten des foo-Plugins deaktivieren
Route::disableDefaultRoute('foo');
// admin-App des foo-Plugins deaktivieren
Route::disableDefaultRoute('foo', 'admin');
// Standardroute des Controllers [\app\controller\IndexController::class, 'index'] deaktivieren
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

Weitere Dokumentation

Unterstützung für $request->setGet() $request->setPost() $request->setHeader()

$request->get(); // Ergebnis z.B. ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Endergebnis ['name' => 'tom']
// Ähnlich für
$request->setPost();
$request->setHeaders();

Weitere Dokumentation

view() unterstützt das Weglassen des Template-Parameters und absolute Pfade

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

Sonstige Konfigurations- und Dateiänderungen

Die listen-Konfiguration aus config/server.php wurde nach config/process.php verschoben. Betrifft nur neue Projekte.
Der process-Ordner wurde nach app/process verschoben. Betrifft nur neue Projekte.

Upgrade-Hinweise

Bei nicht standardkonformer Projektstruktur kann es zu Kompatibilitätsproblemen kommen:

view()-Verwendung prüfen

Prüfen Sie, ob view() Template-Parameter mit führendem / verwendet. Wenn ja, entfernen Sie das /

return view('/user/index');
// Ändern zu
return view('user/index');

Konsistenz benutzerdefinierter Routenparameter prüfen

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

Hinweis: Request-Typhinweis vor dem $request-Parameter hinzufügen.

Composer-Proxy deaktivieren

Composer-Mirrors wie Aliyun haben Verzögerungen. Führen Sie vor dem Upgrade aus:

composer config -g --unset repos.packagist