Guida all'aggiornamento 1.6

Si prega di effettuare un backup prima di eseguire l'aggiornamento con i seguenti comandi

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

Il rilascio della versione 1.6.0 di webman-framework

Caratteristiche aggiuntive

Richiede PHP>=8.0

Supporto per l'ottenimento degli input tramite parametri del controller

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

Accedendo a /user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar si ottiene il seguente risultato

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

Allo stesso modo, i parametri supportano il binding di classi inclusi i modelli, come ad esempio

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

Maggiore riferimento binding dei parametri del controller

Supporto per i middleware nei controller

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

Supporto per Route::fallback()->middleware(...); per aggiungere middleware alle richieste 4xx

Normalmente, le richieste 404 non passano attraverso alcun middleware, a partire dalla versione 1.6.0 è possibile impostare middleware per le richieste 4xx

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

Supporto per Route::disableDefaultRoute() per disabilitare le route predefinite di specifiche applicazioni e controller

// Disabilita le route predefinite del progetto principale, non influisce sui plugin delle applicazioni
Route::disableDefaultRoute();
// Disabilita le route dell'applicazione admin del progetto principale, non influisce sui plugin delle applicazioni
Route::disableDefaultRoute('', 'admin');
// Disabilita le route predefinite del plugin foo, non influisce sul progetto principale
Route::disableDefaultRoute('foo');
// Disabilita le route predefinite dell'applicazione admin del plugin foo, non influisce sul progetto principale
Route::disableDefaultRoute('foo', 'admin');
// Disabilita le route predefinite del controller [\app\controller\IndexController::class, 'index']
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

Ulteriori riferimenti alla documentazione

Supporto per $request->setGet() $request->setPost() $request->setHeader() per sovrascrivere i dati get post headers

$request->get(); // Supponendo si ottenga ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Alla fine si ottiene ['name' => 'tom']
// Simile per gli altri
$requset->setPost();
$request->setHeaders();

Ulteriori riferimenti alla documentazione

view() supporta la semplificazione dei parametri del template e dei percorsi assoluti

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

Altre modifiche e configurazioni dei file

Nella nuova versione, le configurazioni come listen in config/server.php sono state spostate in config/process.php, influenzando solo i nuovi progetti creati con composer create-project; i progetti più vecchi non vengono influenzati.
Nella nuova versione, la cartella process è stata spostata in app/process, influenzando solo i nuovi progetti creati con composer create-project; i progetti più vecchi non vengono influenzati.

Prestare attenzione durante l'aggiornamento

Se il codice dei progetti precedenti non è molto standard, potrebbero esserci dei problemi di compatibilità, i problemi principali sono i seguenti:

Controllare l'uso della funzione view()

Controllare se nel progetto da aggiornare la funzione view() ha parametri del template che iniziano con/, in tal caso rimuovere il carattere iniziale /, ad esempio

return view('/user/index');
// Deve essere cambiato in
return view('user/index');

Controllare la coerenza dei parametri delle route personalizzate

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// Deve essere cambiato in
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

Si prega di notare che è necessario aggiungere il tipo hint Request prima del parametro $request.

Disattivare il proxy composer

I proxy mirror di composer come Alibaba Cloud potrebbero avere dei ritardi e le versioni dei pacchetti potrebbero non essere le più recenti, causando problemi durante l'aggiornamento. Si prega di eseguire i seguenti comandi per eliminare il proxy composer prima di aggiornare

composer config -g --unset repos.packagist