فرم
فرمها بخش مهمی از سایت را تشکیل میدهند. کاربر از طریق فرم ها اطلاعات مورد نیاز را برای شما ارسال میکند. از جمله مواردی که در زمان کار با فرم ها با آن ها روبرو هستیم میتوان به ارسال خطای اعتبار سنج های انجام شده در کنترلر به view و یا مقدار دهی اولیه به فیلد ها در زمان باز شدن فرم ها اشاره کرد.
در فریمورک کلاس packages\base\views\form برای مدیریت فرمها و ارتباط بین کنترلر و view ایجاد شده است.
برای کار با فرمها باید کلاس view از کلاس packages\base\views\form ارث بری کند و یا مخزن ( Trait ) packages\base\views\traits\form در کلاس view استفاده ( use ) شود.
نمونه کلاس view : ارث بری از کلاس
<?php
namespace themes\themename\views;
use packages\base\views\Form;
class ContactUs extends Form {
}
نمونه کلاس view : معرفی traits
<?php
namespace themes\themename\views;
use packages\base\View;
use packages\base\views\traits\Form;
class ContactUs extends View {
use Form;
}
مشخص کردن فیلدهای دارای خطا
متد setFormError() فیلدهای دارای خطا را برای ارسال به view مشخص میکند.
آرگومان ورودی این متد شئ از کلاس packages\base\views\FormError میباشد.
این متد در کنترلر برای ارسال فیلدهای دارای خطا به view صدا زده میشود .
نمونه فایل کنترلر
<?php
namespace packages\packagename\controllers;
use packages\packagename\User as Model;
use themes\themename\views\packagename as views;
use packages\base\{Controller, Response, View, InputValidationException, Password};
class Main extends controller {
public function login(): Response {
$view = View::byName(views\Login::class);
$this->response->setView($view);
$inputRules = array(
"username" => array(
"type" => "email",
),
"password" => array()
);
try {
$this->response->setStatus(false);
$inputs = $this->checkinputs($inputRules);
$model = new Model();
$model->where("email", $inputs["username"]);
$user = $model->getOne()
if (!$user) {
throw new inputValidationException("username");
}
if (Password::verify($inputs["password"], $this->password)) {
throw new inputValidationException("password");
}
Session::set("login", true);
Session::set("userID", $user->id);
$this->response->setStatus(true);
$this->response->Go(base\url("userpanel"));
} catch(InputValidationException $error) {
$view->setFormError(FormError::fromException($error));
}
return $this->response;
}
}
در مثال فوق اگر داده های دریافتی نامعتبر باشند استثنا InputValidationException پرتاب میشود. در catch متد setFormError فراخوانی شده و فیلد دارای خطا را به عنوان ورودی دریافت میکند.
عملیات تبدیل استثنا های packages\base\InputValidationExceptionو packages\base\db\DuplicateRecord به خطاهای فرم توسط فرم ورک به صورت خودکار انجام شده و لازم به نوشتن آن توسط برنامه نویس نیست.
برای اطلاعات بیشتر از اعتبارسنجی به صفحه اعتبارسنجی مراجعه کنید.