چگونگی دیباگ در جالنو
دیباگ کردن یک درخواست، وابسته به نوع آن به دو دسته زیر تقسیم میشود:
۱. درخواست های CLI
درخواست هایی که از طریق خط فرمان ( Terminal ) و کلاً پروسس ها اجرا میشوند از این نوع هستند. خطا یابی در این نوع درخواست آسانتر است.
استثناء packages\base\Exception
اگر در هنگام اجرای درخواست از طریق خط فرمان استثناء در پاسخ دریافت کردید، با توجه به متن استثناء میتواند یکی از دلایل زیر را داشته باشد:
متن خطای Could not find process
همانطور که از متن خطا مشخص است، به این معنی است که فرم ورک کلاس و یا متد معرفی شده برای اجرا را پیدا نکرده است. برای حل این مشکل ابتدا آدرس کلاس معرفی شده را بررسی کنید در صورت صحت از معرفی فایل Process در Autoloader اطمینان کسب کنید.
متن خطای Process #1 already running
این خطا زمانی رخ میدهد که یک روند را با استفاده از شناسه ( ID ) آن فراخوانی میکنیم. اگر روند در حال اجرا باشد، فرم ورک در پاسخ یک استثناء با این متن خطا پرتاب و از اجرا مجدد جلوگیری میکند. اگر از اینکه این روند متوقف شده است و قسط دارید مجدداً آن را اجرا کنید، وضعیت روند را در جدول base_processes به وضعیت 0 تغییر دهید.
استثناء packages\base\notShellAccess
اگر سیستم عامل شما از خانواده ی سیستمهای لینوکس نباشد و یا از اجرای متد shell_exec توسط تنظیمات PHP جلوگیری شده باشد، این استثناء را دریافت میکنید. برای حل این موضوع از عدم وجود متد shell_exec در تنظیم disable_functions در فایل تنظیمات PHP ( فایل php.ini ) اطمینان کسب کنید.
۲. درخواست های CGI ( HTTP )
اگر در هنگام اجرا درخواست خطای packages\base\NotFound دریافت میکنید، با انجام یکی از اقدامهای زیر میتوانید منبع مشکل را پیدا کنید:
از فعال بودن پکیج اطمینان کسب کنید.
برای اینکه یک پکیج توسط فرم ورک بارگزاری و قوانین آن خوانده شود، حتماً باید package.json با قواعد فرم ورک در پکیج وجود داشته باشد.
از معرفی فایل Router اطمینان کسب کنید
باید نام فایل را در آپشن router در فایل تنظیمات پکیج Package.json معرفی کرده باشید.
قاعده معرفی شده در Router را بررسی کنید.
گاهی اوقات ممکن هست به دلیل مغایرت در آدرس معرفی شده در فایل router و آدرس فراخوانی شده این خطا را دریافت کنید.
کنترلر معرفی شده را بررسی کنید:
ممکن هست استثناء packages\base\NotFound توسط کنترلر پرتاب شده باشد. کنترلر و شرایط را بررسی کنید.
میتوانید برای اطمینان از اینکه درخواست به مرحله ی فراخوانی کنترلر رسیده است، یک استثنای دلخواه و یا یک متن برای نمایش چاپ کنید.
و اما اگر در پاسخ درخواست استثناء Packages\base\NoViewException برخورد کردهاید باید فایل و فایلهای View را بررسی کنید.
زمانیکه یک فایل View توسط متد SetView در پاسخ کنترلر معرفی میکنید، اگر فایل معرفی شده توسط فرم ورک شناسایی نشده و یا نتواند آن را پیدا کند، این استثناء را پرتاب میکند.
اگر View معرفی شده از نوع view های قالب نباشد، باید حتماً View متناظر با آن در قالب و در فایل تنظیمات قالب ( فایل Theme.json ) معرفی شده باشد، در غیر اینصورت با وجود شناسایی کلاسها باز این استثناء پرتاب خواهد شد.
اگر یک پاسخ خالی دریافت کردید و صفحه ی سفید در مرورگر برای شما نمایش داده میشود، ممکن هست یکی از حالات زیر رخ داده باشد:
فایل View در پاسخ معرفی نشده باشد:
در کنترلر حتماً باید View درجواب مشخص شده باشد. برای این منظور باید از متد SetView از کلاس Response استفاده کنید.
use packages\base\{Response, View};
use packages\userpanel\{Controller, views}
class Login extends Controller {
public function signup(): Response {
$view = View::byName(views\Register::class);
$this->response->setView($view);
// Or $this->response->setView(View::byName(views\Register::class));
$this->response->setStatus(true);
return $this->response;
}
}
فایل HTML معرفی نشده باشد:
با وجود معرفی View ها اگر فایل HTML توسط فرم ورک شناسایی نشود، یک پاسخ خالی در پاسخ شما ارسال و صفحه ی سفید برای شما نمایش داده میشود.
برای معرفی فایل HTML میتوانید در فایل تنظیمات قالب ( فایل Theme.json ) آن را معرفی کنید و یا دقیقاً یک فایل دقیقاً یکسان با فایل View در مسیر قالب و در پوشه ی HTML ایجاد کنید. فرم ورک به صورت خودکار View و HTML را به یکدگیر متصل میکند.
{
"name" : "clipone",
"title":"Clip-One",
"version" : "1.4.0",
"views": [
{
"name":"\\themes\\clipone\\views\\register",
"parent":"packages\\userpanel\\views\\register",
"file":"html/register.php"
}
]
}
خط ا و یا استثناء دریافت کرده اید:
اگر نمایش خطا ها در فرم ورک بسته باشد، در پاسخ شما خطا نمایش داده نشده و یک پاسخ خالی دریافت خواهید کرد.
برای نمایش خطا ها میتوانید در فایل Index.php نمایش خطاهای PHP را فعال کنید. و برای نمایش استثناء ها باید در همین فایل و در قسمت Catch استثناء ها خطا را برای نمایش چاپ کنید.
اخطار: هرگز پیشنهاد نمیشود در حالتی که سایت برای استفاده در دسترس عموم قرار گرفته است، نمایش خطا ها و یا استثناء ها فعال باشد.