কাস্টম 404

যদি আপনি 404 এর বিষয়বস্তু ডায়নামিকভাবে নিয়ন্ত্রণ করতে চান, যেমন AJAX অনুরোধে JSON ডেটা ফেরত দেওয়া {"code:"404", "msg":"404 not found"} এবং পেজের অনুরোধে app/view/404.html টেমপ্লেট ফেরত দেওয়া, তাহলে নিচের উদাহরণটি দেখুন।

নিচে PHP নেটিভ টেমপ্লেটের উদাহরণ দেওয়া হয়েছে, অন্যান্য টেমপ্লেট twig blade think-template একই নীতিতে عمل করে।

ফাইল তৈরি করুন app/view/404.html

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>404 not found</title>
</head>
<body>
<?=htmlspecialchars($error)?>
</body>
</html>

config/route.php তে নিচের কোড যুক্ত করুন:

use support\Request;
use Webman\Route;

Route::fallback(function(Request $request){
    // ajax অনুরোধে JSON ফেরত দিন
    if ($request->expectsJson()) {
        return json(['code' => 404, 'msg' => '404 not found']);
    }
    // পেজের অনুরোধে 404.html টেমপ্লেট ফেরত দিন
    return view('404', ['error' => 'some error'])->withStatus(404);
});

কাস্টম 405

webman-framework 1.5.23 থেকে, কলব্যাক ফাংশনে status প্যারামিটার প্রেরণের সমর্থন রয়েছে, যদি status 404 হয় তবে তা নির্দেশ করে যে অনুরোধটি বিদ্যমান নয়, 405 নির্দেশ করে যে বর্তমান অনুরোধ পদ্ধতি সমর্থিত নয় (যেমন Route::post() দ্বারা সেট করা রুটটি GET পদ্ধতিতে এক্সেস করা হচ্ছে)।

use support\Request;
use Webman\Route;

Route::fallback(function(Request $request, $status) {
    $map = [
        404 => '404 not found',
        405 => '405 method not allowed',
    ];
    return response($map[$status], $status);
});

কাস্টম 500

নতুন app/view/500.html তৈরি করুন

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>500 Internal Server Error</title>
</head>
<body>
কাস্টম ত্রুটি টেমপ্লেট:
<?=htmlspecialchars($exception)?>
</body>
</html>

নতুন app/exception/Handler.php তৈরি করুন (যদি ডিরেক্টরি না থাকে তাহলে নিজে তৈরি করুন)

<?php

namespace app\exception;

use Throwable;
use Webman\Http\Request;
use Webman\Http\Response;

class Handler extends \support\exception\Handler
{
    /**
     * রেন্ডার রিটার্ন
     * @param Request $request
     * @param Throwable $exception
     * @return Response
     */
    public function render(Request $request, Throwable $exception) : Response
    {
        $code = $exception->getCode();
        // ajax অনুরোধে JSON ডেটা ফেরত দিন
        if ($request->expectsJson()) {
            return json(['code' => $code ? $code : 500, 'msg' => $exception->getMessage()]);
        }
        // পেজের অনুরোধে 500.html টেমপ্লেট ফেরত দিন
        return view('500', ['exception' => $exception], '')->withStatus(500);
    }
}

কনফিগারেশন config/exception.php

return [
    '' => \app\exception\Handler::class,
];