دليل الترقية 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']
// مماثل للتالي
$request->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 قبل الترقية
composer config -g --unset repos.packagist