سلام
توی پست این هفته بریم که راجع به Validation در CI بخونیم.
خب validation یا اعتبار سنجی چی هست؟
فرض کنید که شما یک فرم مثل فرم زیر برای ثبتنام توی یک وبسایت دارید.
فرض کنید که شما برای ثبتنام باید name به تعداد 15 کارکتر داشته باشید و از نوع string باشد ولی شما به اشتباه ورودی کوتاه تر یا عددی وارد میکنید. خب این data برای ذخیره در database نامعتبر است و شما نمیتوانید این data رو ذخیره کنید. پس باید اول اطلاعات شما بررسی شود که آیا برای ذخیره معتبر است یا خیر؟! و اگر معتبر نبود باید به کاربر خطا بدهد که اطلاعات وارد شده در این field نادرست است و کاربر اطلاعات درست را وارد کند.
اعتبار سنجی (validation) :
اول بگم که برای validation حتما باید از helper function های url و form استفاده کنید.
helper(['form', 'url']);
پس توی متد __construct مینویسیم.
$this->helpers=helper(['url','form']);
یک متد درست میکنیم مثلا بنام register و کد زیر را داخل متد مینویسیم
$validation=$this->validate([ 'name'=>'required|trim|string|max_length[15]' ]);
همانطور که در متد بالا میبینید از متد validate برای اعتبار سنجی استفاده میکنیم. داخل این متد یک آرایه میذاریم و توی آرایه اسم فیلد را که اینجا name هست را مینویسیم و بعد شرایطی که فیلد مورد نظر باید داشته باشد را مینویسیم.
اولین نوشته required است به این معنی که این فیلد حتما باید پر شود و در صورت خالی بودن فیلد خطا میدهد.
دومی trim است که فضای خالی قبل و بعد نوشته نباید باشد.
سومی string است که یعنی داده ی ما حتما باید از نوع string باشد و هر نوع دیگر باشد خطا میدهد.
و max_length میگه حداکثر تعداد کارکتر های موجود چقدر باشد.
'email'=>'required|string|valid_email'
در کد بالا valid_email چک میکند که آیا ورودی فیلد ایمیل ما درست است یا خیر.
تمام شرطهای مربوط به validation را توی یک متغیر مینویسیم و بعد میگوییم که اگر validation درست نبود دوباره همان صفحه را load کند و اگر درست بود بره به صفحه ی دیگر.
خب توی کد بالا \Config\Services::validation() چیه؟؟؟
این کد در واقع library مربوط به validation هست که ما به view ارسال میکنیم. بعد خطا های مربوط به validation را در view نمایش میدهیم.
نمایش خطاها در view:
برای نمایش داده ها در view از دو متد hasError , getError استفاده میکنند.
به این صورت
متد hasError چک میکند که آیا فیلد name خطایی دارد یا خیر. اگر داشت با متد getError نمایش میدهد.
این کد را برای تمام فیلد ها مینویسیم.
اما یک نکته اینجا هست.
وقتی بار اول صفحه ی view رو لود میکنیم خطا میدهد که فیلدها خالی هستن مثل عکس زیر:
خب این اصلا درست نیست. چکار کنیم ؟؟
بهترین کار اینه که یک متد درست کنیم برای load کردن view برای بار اول
مثلا توی controller یک متد درست کنیم بنام signو توی این متد یکبار view مربوط به load میکنیم.
نکته: حتما باید ()Config\Services::validation\ رو بنویسیم چون توی view از متد getError و hasError استفاده کردیم و اگه ننویسیم خطا میده.
بعد کدهای مربوط به register را در یک متد دیگر مینویسیم. مثلا متد register:
همین ?
میتونید برید توی سایت codeigniter و تمام شرایط مربوط به validation و کابردهاشون رو بخونید و بسته به نیازتون استفاده کنید.
خب توی جلسه ی بعد راجع به register و login صحبت میکنیم.