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');
// foo প্লাগিনের admin অ্যাপের ডিফল্ট রুট বন্ধ করুন, প্রধান প্রকল্পে প্রভাব পড়বে না
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']);
    }
}

অন্যান্য কনফিগারেশন ও ফাইল পরিবর্তন

নতুন সংস্করণে config/server.php এর listen সহ কনফিগারেশনগুলো 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 প্রক্সি বন্ধ করুন

Alibaba Cloud এবং অন্যান্য composer镜像代理 দেরিতে চলে, সেখানে প্যাকেজ সংস্করণগুলো সর্বশেষ নাও হতে পারে, যা আপগ্রেডের সময় সমস্যা তৈরি করতে পারে, দয়া করে নীচের কমান্ডটি চালান composer প্রক্সি মুছে ফেলতে এবং তারপর আপগ্রেড করতে

composer config -g --unset repos.packagist