خطاها در قالب
گاها لازم است خطاهایی که به وجود میآید در قالب نمایش داده شوند، برای نمایش و مدیریت این دسته از خطاها در فریمورک کلاس packages\base\view\Error ایجاد شده است.
کد خطا
برای مدیریت خطاها حتما پیشنهاد میشود برای هر خطا یک کد مشخص تعیین کنید که بیانگر علت خطای دریافتی میباشد. از این کد میتوانید برای پیدا کردن مشکل و یا نمایش خطای مختص به آن استفاده کنید.
در زمان ایجاد شئ از کلاس Error میتوانید کد خطا را در اولین آرگومان آن مشخص کنید. همچنین میتوانید بعد از ایجاد شئ، از متد setCode برای مشخص کردن کد خطا، استفاده نمایید.
از طریق فراخوانی متد getCode میتوانید کد خطا مشخص شده را دریافت کنید.
<?php
namespace packages\packagename\controllers;
use themes\themename\views\packagenaem as views;
use packages\packagename\{hosts\Plan as HostModel, Order as OrderModel, Tld as TldModel};
use packages\base\{Controller, Response, View, Http, InputValidationException, view\Error};
class Orders extends Controller {
public function domain($data): Response {
$view = View::byName(views\domains\Order::class);
$this->response->setView($view);
if (Http::is_post()) {
$this->response->setStatus(false);
$inputs = $this->checkinputs(array(
'domain' => array(
"type" => "string",
),
'tld' => array(
'type' => array('number', 'string'),
),
'hostPlan' => array(
'type' => HostModel::class,
'optional' => true
)
));
if (!$inputs["tld"]) {
throw new InputValidationException("tld");
}
if (!$inputs["domain"]) {
throw new InputValidationException("domain");
}
if (is_number($inputs["tld"])) {
$inputs["tld"] = TldModel::byId($inputs["tld"]);
if (!$inputs["tld"]) {
throw new InputValidationException("tld");
}
$inputs["tld"] = $inputs["tld"]->code;
}
$isAvailable = OrderModel::checkDomainAvailability($inputs["domain"] . "." . $inputs["tld"]);
if (!$isAvailable) {
$error = new Error("domain_is_not_available");
// $error->setCode("domain_is_not_available");
$view->addError($error);
/**
* Or you can throw it. Jalno will be catch and add it to view errors automatically
*
* throw $error;
*/
}
$order = new Order();
$order->user_id = 1;// Current user id
$order->domain = $inputs["domain"] . "." . $inputs["tld"];
if (isset($inputs["hostPlan"])) {
$order->host_id = $inputs["hostPlan"]->id;
}
$order->status = OrderModel::NOT_CONFIGURED;
$order->save();
$this->response->setStatu(true);
} else {
$this->response->setStatu(true);
}
return $this->response;
}
}
نوع خطا
در فریمورک خطاها به چهاردسته زیر تقسیم میشوند که هرکدام بیانگر سطحی از خطا هستند.
نوع خطا در متغیر type کلاس ذخیره میشود و مقدار پیش فرض آن fatal میباشد.
| سطح | کاربرد |
|---|---|
| success | پیام تایید |
| warning | خطاهایی که روند اجرای برنامه را متوقف نمیکنند اما نیاز به بررسی و یا حساسیت بیشتری دارند |
| fatal | خطاهایی که باید روند اجرای برنامه متوقف شود |
| notice | اعلام مشکلاتی که در برنامه وجود دارد |
توجه : success خطا نیست از آن برای نمایش پیام هایی در قالب با مضمون موفقیت آمیز بودن عملیاتی در اجرای برنامه استفاده میشود.