آموزش لاراول – ایجاد form validation
- توسط : علی حسین شهابی
- 0 نظر
با سلام خدمت دوستان عزیز.
امروز میخوام درباره form validation یعنی چک کردن داده های ورودی که کاربر وارد می کند ، صحبت کنیم.form validation خیلی تو پروژه های ما مهم هست و ما همیشه باهاش سرکار داریم.
حالا امروز می خوایم باهم ببینیم چجوری میشه در Laravel این کار رو انجام بدیم .
ظاهر فرم امون رو میخوایم با بوت استرپ درست کنیم که در نهایت به این شکل در میاد :
ما در این برنامه ای که میخوایم بنویسیم کارهای زیر رو انجام میدیم :
1- اعتبار سنجی فریم و اطلاعات ارسالی
2-نمایش ارورهای مروبطه به کاربر
3-ایجاد ارورهای سفارشی
Database and Models
خب ابتدا یک پایگاه داده در xamp یا wamp ایجاد کنید تا جداولی که نیاز داریم رو در اون قرار دهیم. جداول رو با استفاده از فریم ورک لاراول ایجاد میکنیم (به وسیله کد).
بعد از اینکه دیتابیس رو ساختیم در شاخه ی
app/config/local/database.php یا app/config/database.php اطلاعات مربوط به اون رو وارد کنید .
Migration :
فریم ورک لاراول همان طور که میدونید امکانی داره به نام Migration که در واقع به وسیله اون ما می تونیم جدول های خودمون رو بسازیم.
برای این کار کافیه در ترمینال دستور زیر را وارد نماییم و اینتر را بزنیم :
$ php artisan migrate:make create_ducks_table --create=ducks
خب تو این دستور ما گفتیم که یک Migration ایجاد کن با نام create_ducks_table و در انتهای دستور با عبارت create=ducks گفتیم که نام جدول مورد نظر ما ducks است.
پس از اجرای این دستور Migration ما ساخته می شود و در شاخه app/databases/migrations/ با نامی که براش تعریف کردیم ایجاد خواهد شد .
Validating Our Form
خب حالا که View رو هم ایجاد کردیم و فرم رو ساختیم میریم سراغ ولیدیشن اطلاعات ارسال شده از طریق فرم.همان طور که در کدها ی بالا مشاهده کردین ما action=”/ducks” را برای فرم قرار دادیم . پس وقتی ما روی دکمه کلیک میکنیم اطلاعات فرم به صورت POST ارسال خواهد شد و ما از طریق فایل route اون رو مسیر دهی کردیم که به کجا بره .
Basic Form Validation
خب حالا اجازه بدین که ما شروع کنیم به ولید کردن اطلاعات ارسال شده به وسیله فرم. میخوایم کدهای ولیدیشن رو در فایل routes.php ایجاد کنیم در واقع همان جا که مسیردهی هارو مشخص کرده بودیم.
برای اطلاعات ارسال شده یک قانون (RULE)ایجاد می کنیم و چک می کنیم که آیا به این قانون ها هماهمگ است یا خیر..اگر هماهنگ نبود دوباره کاربر را به همان صفحه قبلی بر میگردانیم (Redirect) و ارور هم به کاربر نشون میدیم.
من میام کدهای رو تغییر میدم :
این یه روش نشان دادن ارور ها به کاربر هست که همه ارور ها را می توانیم مثلا در بالای فرم زیر هم به کاربر نمایش دهیم.حتی میتونیم ارورها را زیر هر input نشان دهیم برای این کار باید مطالب کد زیر : برای هر Input کد اش رو بنویسیم :
// select the first error that corresponds to the name field
{{ $errors->first('name') }}
این خط ارور مربوط به Input با نام و آی دی Name را چاپ می کند . برای فیلدهای دیگر هم باید قرار دهین .
کدهای جدید با استفاده از نمایش ارور ها در زیر Input به صورت زیر می باشد :
...
...
شکل ظاهری فرم امون اینگونه میشه :
Showing Old Inputs In the View
به طور پیش فرض وقتی اروری وجود داشته باشد و ما کاربر را دوباره به صفحه ی فرم انتقال بدیم تا اطلاعات را دوباره وارد و اطلاح نماید ، مقدارهای Input پاک شده و در textbox ها نمایش نمی یابد. خب این کار ، کاربر را ممکنه آزار دهد چون باید اطلاعات صحیح را هم دوباره وارد کند پس ما میخوایم حالا اطلاعات قبلی فرم را به View برگردانید تا در جاهای خود قرار بگیرند :
برای این کار باید در فایل Route.php و همچنین در View فرم ها ، کدهایی را اضافه کنید :
// app/routes.php
...
// check if the validator failed -----------------------
if ($validator->fails()) {
// redirect our user back with error messages
$messages = $validator->messages();
// also redirect them back with old inputs so they dont have to fill out the form again
// but we wont redirect them with the password they entered
return Redirect::to('ducks')
->withErrors($validator)
->withInput(Input::except('password', 'password_confirm'));
} else {
...
پس ما در این کد کاربر را به صفحه فرم انتقال میدیم دوباره و اطلاعات فرم را به جز پسورد ، به صفحه فرم ارسال می کنیم تا اونجا در فیلدهای name,Email و .. قرار گیرد.
همان طور که می دانید در HTML در فیلدهای Input خاصیتی به نام Value وجود داره که مقدار پیشفرض اون Input رو میتونیم قرار بدیم اونجا. پس از همین خصوصیت کمک میگیرم ما هم :
این کد را باید در فرم و input های خودمون قرار بدیم :
{{ Input::old('name') }}
این هم کدهای تغییر یافته ی View :
...
Custom Error Messages
آخرین چیزی که امروز می خوایم مدیریت کنیم در form validation ، ایجاد پیغام های خطای سفارشی هست. یعنی خودمون متن یک پیغام رو بسازیم و به کاربر نمایش دهیم .
// app/routes.php
// route to process the ducks form
Route::post('ducks', function()
{
// create the validation rules ------------------------
$rules = array(
'name' => 'required', // just a normal required validation
'email' => 'required|email|unique:ducks', // required and must be unique in the ducks table
'password' => 'required',
'password_confirm' => 'required|same:password' // required and has to match the password field
);
// create custom validation messages ------------------
$messages = array(
'required' => 'The :attribute is really really really important.',
'same' => 'The :others must match.'
);
// do the validation ----------------------------------
// validate against the inputs from our form
$validator = Validator::make(Input::all(), $rules, $messages);
// check if the validator failed -----------------------
if ($validator->fails()) {
در خط 19 تا 23 ما پیغام های ارور رو خودمون تغریف کردیم و گفتیم اگر کاربر داخل فیلدها چیزی وارد نکرده بود (Required) چه پیغامی رو نشون بده و اگر تکرار پسورد با پسورد تطابق نداشت (Same) چه پیغامی رو نشون بده .
توجه کنید که ما اومدیم از :attribute و :other هم استفاده کردم داخل پیغام خطامون که باید حتما باشه و اشاره می کنه به فیلد مربوطه
و این هم شکل نهایی ارور ها ی اختصاصیمون :
آموزش لاراول Laravel
Model Level Rules
تقریبا کار ما تموم شده دیگه و چیز جدیدی نداریم برای کار ولی این رو هم در آخر اضافه کنم که ما اومدیم در بالا کدهای اعتبارسنجی فرممون رو در Route.php وارد کردیم. میتونیم اعتبار سنجی را در Model ها هم انجام بدیم.
در واقع ما قانون های اعتبار سنجی رو در Model وارد میکنیم و در Route.php اون رو صدا میزنیم :
<?php
// app/models/Duck.php
class Duck extends Eloquent {
protected $fillable = array('name', 'email', 'password');
public static $rules = array(
'name' => 'required', // just a normal required validation
'email' => 'required|email|unique:ducks', // required and must be unique in the ducks table
'password' => 'required',
'password_confirm' => 'required|same:password' // required and has to match the password field
);
}
برای دسترسی به Model ها از طریق فایل های دیگه باید به این گونه عمل کنیم :
ModelName::$rules
یعنی مثلا در فایل Route.php کد زیر را وارد می کنیم و قانون هامون رو که در Model تعریف کردیم رو استفاده می نماییم :
$validator = Validator::make(Input::all(), ModelName::$rules);
خب اینم از آموزش امروز.حتما باید قبل از این آموزش شما با مفاهیم مقدماتی فریم ورک لاراول آشنا باشین و یه مروری کرده باشین.ساختار کلی اون رو بشناسین.
من فایل های این جلسه رو براتون قرار میدم اینجا تا استفاده کنید و تمرین نمایید .