1.6 Yükseltme Kılavuzu

Yükseltmeden önce yedekleme yapmayı unutmayın, aşağıdaki komutları çalıştırın

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

webman-framework 1.6.0 sürümünü yayınladı

Yeni Özellikler

Gereksinimler PHP>=8.0

Kontrolcü parametreleri kullanarak girdi alma desteği

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

/user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=bar adresine erişildiğinde sonuç

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

Aynı zamanda parametreler, model dahil sınıflarla da bağlanabilir, örneğin

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

Daha fazla bilgi için kontrolcü parametre bağlama

Kontrolcü ara katman desteği

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

Route::fallback()->middleware(...) ile 4xx isteklerine ara katman ekleme desteği

Normal şartlarda 404 istekleri hiçbir ara katmandan geçmezken, 1.6.0 sürümünden itibaren 4xx isteklerine ara katman ayarlanabilir

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

Route::disableDefaultRoute() ile belirli uygulama, kontrolcünün varsayılan rotalarını kapatma desteği

// Ana projenin varsayılan rotasını devre dışı bırak, uygulama eklentilerini etkilemez
Route::disableDefaultRoute();
// Ana projenin admin uygulamasının rotasını devre dışı bırak, uygulama eklentilerini etkilemez
Route::disableDefaultRoute('', 'admin');
// foo eklentisinin varsayılan rotasını devre dışı bırak, ana projeyi etkilemez
Route::disableDefaultRoute('foo');
// foo eklentisinin admin uygulamasının varsayılan rotasını devre dışı bırak, ana projeyi etkilemez
Route::disableDefaultRoute('foo', 'admin');
// Kontrolcü [\app\controller\IndexController::class, 'index'] için varsayılan rotayı devre dışı bırak
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

Daha fazla referans belgesi

$request->setGet() $request->setPost() $request->setHeader() ile get post headers verilerini geçersiz kılma desteği

$request->get(); // varsayılan olarak ['name' => 'tom', 'age' => 18' alındı
$request->setGet(['name' => 'tom']);
$request->get(); // nihai olarak ['name' => 'tom'] alındı
// Aşağıdakiler benzer
$requset->setPost();
$request->setHeaders();

Daha fazla referans belgesi

view() fonksiyonu şablon parametreleri ve mutlak yolları atlama desteği

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

Diğer yapılandırma ve dosya değişiklikleri

Yeni sürümde config/server.php dosyasındaki listen gibi yapılandırmalar config/process.php altına taşındı, bu sadece composer create-project ile oluşturulan yeni projeleri etkiler, eski projelerin yükseltmesini etkilemez.
Yeni sürüm process dizini app/process dizinine taşındı, bu da sadece composer create-project ile oluşturulan yeni projeleri etkiler, eski projelerin yükseltmesini etkilemez.

Yükseltme Dikkatler

Eğer önceki projenin kodu çok standart değilse, bazı uyumluluk sorunları olabilir, ana sorunlar şunlardır:

view() fonksiyonunu kontrol et

Yükseltmek istediğiniz projedeki view()'in / ile başlayan şablon parametrelerini kontrol edin, varsa baştaki /'yi kaldırın, örneğin

return view('/user/index');
// şu şekilde değiştirilmelidir
return view('user/index');

Özel rota parametrelerinin tutarlılığını kontrol et

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// şu şekilde değiştirilmelidir
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

Dikkat, $request parametresinin önüne Request türü belirtimi eklenmelidir.

composer proxy'sini kapat

Alibaba Cloud gibi composer ayna proxy'leri gecikme yapabilir, içlerindeki paketlerin sürümleri en son sürüm olmayabilir, bu nedenle yükseltme problemleri oluşabilir, lütfen aşağıdaki komutu çalıştırarak composer proxy'sini kaldırın ve ardından yükseltin

composer config -g --unset repos.packagist