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']);
$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();
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