1.6 دليل الترقية

يرجى إجراء النسخ الاحتياطي قبل الترقية، وتنفيذ الأوامر التالية للترقية

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

إصدار webman-framework 1.6.0

الميزات الجديدة

يتطلب PHP>=8.0

دعم الحصول على مدخلات من معلمات وحدة التحكم

<?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 يتم الحصول على النتائج

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

كما يدعم المعلمات ربط الفئات بما في ذلك النماذج، مثل

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

لمزيد من المعلومات، يرجى الاطلاع على ربط معلمات وحدة التحكم

دعم مكونات وحدة التحكم

<?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(...); لإضافة مكونات لطلبات 4xx

بشكل طبيعي، لن تمر طلبات 404 عبر أي مكونات، ولكن بدءًا من إصدار 1.6.0، يمكنك تعيين مكونات لطلبات 4xx

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

دعم Route::disableDefaultRoute() لإغلاق الطرق الافتراضية لتطبيقات أو وحدات تحكم محددة

// إيقاف تشغيل الطريق الافتراضي للمشروع الرئيسي، دون التأثير على إضافات التطبيق
Route::disableDefaultRoute();
// إيقاف تشغيل الطرق الخاصة بتطبيق admin في المشروع الرئيسي، دون التأثير على إضافات التطبيق
Route::disableDefaultRoute('', 'admin');
// إيقاف تشغيل الطريق الافتراضي لإضافة foo، دون التأثير على المشروع الرئيسي
Route::disableDefaultRoute('foo');
// إيقاف تشغيل الطريق الافتراضي لتطبيق admin لإضافة foo، دون التأثير على المشروع الرئيسي
Route::disableDefaultRoute('foo', 'admin');
// إيقاف تشغيل الطريق الافتراضي لوحدة التحكم [\app\controller\IndexController::class, 'index']
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

المزيد من الوثائق المرجعية

دعم $request->setGet() $request->setPost() $request->setHeader() لتجاوز بيانات get و post و headers

$request->get(); // إفترض الحصول على ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // في النهاية ستحصل على ['name' => 'tom']
// ما يلي مشابه
$requset->setPost();
$request->setHeaders();

المزيد من الوثائق المرجعية

view() يدعم إغفال معلمة القالب ومسارها المطلق

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

تغييرات في الإعدادات والملفات الأخرى

تم نقل إعدادات listen وغيرها من config/server.php إلى config/process.php في النسخة الجديدة، مما يؤثر فقط على المشاريع الجديدة التي تم إنشاؤها باستخدام composer create-project، ولن تؤثر على المشاريع القديمة عند الترقية.
تم نقل دليل process إلى app/process في النسخة الجديدة، مما يؤثر فقط على المشاريع الجديدة التي تم إنشاؤها باستخدام composer create-project، ولن تؤثر على المشاريع القديمة عند الترقية.

ملاحظات الترقية

إذا لم يكن كود المشروع السابق يتسم بالاتساق، فقد تواجه بعض مشاكل التوافق، وتتمثل المشاكل الرئيسية فيما يلي:

مراجعة استخدام دالة view()

تحقق مما إذا كان لمشروعك الذي ترغب في ترقيته دالة view() تحتوي على معلمات قالب تبدأ بـ /، إذا كان الأمر كذلك فقم بإزالة / في البداية، مثل

return view('/user/index');
// يجب تغييره إلى
return view('user/index');

مراجعة توافق معلمات التوجيه المخصصة

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// يجب تغييره إلى
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

تأكد من إضافة نوع Request قبل معلمة $request.

إيقاف تشغيل وكيل composer

توجهات الوكيل مثل تلك الموجودة في علي بابا قد تكون متأخرة، والإصدارات داخل الحزم قد لا تكون الأحدث، مما يتسبب في حدوث مشاكل عند الترقية، يرجى تنفيذ الأمر التالي لإزالة وكيل composer، ثم ترقية البرنامج

composer config -g --unset repos.packagist