بدون شک فریم وورک لاراول به دلیل انعطاف پذیری بالا و امکانات فراوانی که دارد یکی از بهترین گزینه های برای توسعه دهندگان php می باشد.
همانطور که می دانید اعتبار سنجی فرم ها یکی از مهمترین بخش های هر برنامه ای می باشد.در لاراول نیز برای اعتبار سنجی فرم ها امکاناتی فراهم شده است، که کار شما را بسیار راحت کرده است، برای اینکار تنها کافیست که ما قوانین (rouls) های خود را معرفی و سپس با استفاده از کلاس Validator به سادگی معتبر بودن یا نبودن درخواست را بررسی، تا درصورتی که درخواست ارسال شده با قوانین ما هماهنگی داشت به مرحله بعد و در غیر این صورت پیغام خطا نمایش داده خواهد شد.
به نمونه کد زیر توجه کنید:
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
در صورتی که مقدار title وارد نشده باشد یا اندازه آن بیشتر از ۲۵۵ کاراکتر باشد یا در جدول posts یک title همانند title ارسال شده وجود داشته باشد و همچین اگر مقدار فیلد body وارد نشده باشد خطایی برگشت داده خواهد شد.
ساده بود نه؟
اما به نظر شما این بهترین راهه؟
به نظر من که نه! ما میتوانیم باز هم اعتبار سنجی خود را ساده تر و البته حرفه ای تر بنویسم!
در روش بالا همیشه controller شما شلوغ خواهد بود. اما ما قصد داریم با استفاده از "form request" کاری کنیم که کنترلر ما تمیز تر باشد.
بصورت بیش فرض کلاس های request خود حاوی منطق اعتبار سنجی می باشند.
آموزش کامل ایجاداعتبار سنجی validation درخواست ها بصورت استاندارد در لاراول
برای شروع ما یک کلاس شخصی form request با استفاده از کامند زیر ایجاد خواهیم کرد:
php artisan make:request StoreBlogPost
دستور بالا را در ترمینال وارد کنید. این دستور یک کلاس با نام StoreBlogPost در دایرکتوری app/Http/Requests ایجاد خواهد کرد.
فایل ایجاد شده را باز کنید. خواهید دید که بصورت زیر می باشد.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreBlogPost extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
کلاس های FormRequest لاراول بصورت بیش فرض دارای دو متد auth() و rules می باشند.
حالا شما می توانید در متد rules() قوانین اعتبار سنجی خود را وارد کنید.
برای نمونه کدهای مربوط به اعتباری سنجی title و body در بخش اول را بصورت زیر در متد rules() وارد خواهیم کرد:
public function rules()
{
return [
'title' => 'required',
'body' => 'required'
];
}
حالا شما می توانید برای هرکدام از قوانین ایجاد شده یک بیغام سفارشی نیز ایجاد نمایید. برای اینکار شما باید متد messages() را در این کلاس override کنید. که بصورت زیر خواهد شد:
/**
* Custom message for validation
*
* @return array
*/
public function messages()
{
return [
'title.required' => 'وارد کردن فیلد عنوان اجباری می باشد!',
'body.required' => 'لطفا فیلد متن را وارد نمایید!',
];
}
ما همه کارها را انجام داده ایم!
تنها کافیست این کلاس را در کنترلر خود استفاده نمایید.
برای اینکه یا form request ایجاد شده را در کنترلر فراخوانی کنیم بصورت زیر اقدام خواهیم کرد:
برای نمونه ما یک کنترلر داریم بنام BlogPostController که قصد داریم from Request ایجاد شد را در هنگام ذخیره داده ها اعمال نماییم. پس بصورت زیر آن را به متد مورد نظر خواهیم داد:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreBlogPost;
class BlogPostController extends Controller
{
public function store(StoreBlogPost $request)
{
// it will return only the validated data
$validated = $request->validated();
}
}
حالا بدون هیچ نگرانی اعتبار سنجی ما اجرا خواهد شد و اگر اطلاعات ارسال شده اعتبار لازم را نداشته باشند کاربر به صفحه قبلی برگشت داده خواهد شد. و در صورتی که در خواست ارسال Ajax باشند نیز باسخ ارسالی با وضعیت 422 بصورت خطایی با فرمت Json برگشت داده خواهد شد.
همانطور که دیدی هدف اصلی ما ایجاد کدهای حرفه ای تر و البته سبک تر کردن کنترلر بود که با استفاده از کلاس FormRequest اینکار را به سادگی انجام دادیم.
شما می توانید برای هر درخواست خود کلاس های مجزا ایجاد نمایید و به راحتی از آن ها استفاده نمایید.
امیدوارم از این مطلب لذت برده باشید. در صورتی که سوالی یا بیشنهاد و نظری دارید از بخش نظرات ارسال فرمایید.
برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *
ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *
هنوز برای این مطلب نظری ارسال نشده است!