PDA

View Full Version : ارسال خطاهای اعتبار سنجی به view در mvc



IMANAZADI
چهارشنبه 19 اسفند 1394, 11:07 صبح
سلام به دوستان


بازهم یک مشکل


یک کلاس برای اعتبار سنجی نوشتم که یک رول میگیره و بر اساس اون فیلدهای داده شده رو به تناسب رول های داده شده اعتبار سنجی میکنه و در صورت valid نبودن آرایه ای از خطا ها (پیام های خطا) صادر میکنه


در کنترلر صفحه لاگین ما فیلد های یوزرنیم و پسورد رو به این کلاس اعتبارسنجی مون ارسال میکنیم و پس از اعتبار سنجی در صورت صحت فیلد ها مقدار true و در صورت خطا ، آرایه خطا رو برمیگردونه


حالا میخواهیم این خطاها در view صفحه لاگین جلوی هر ورودی نشون داده بشه


این کد اکشن کنترلر لاگین هست






public function logged()
{
if(isset($_POST['sublogin']))
{
unset($_POST['sublogin']);

$rules=array('username'=>'required|min_lenght[8]','password'=>'required|min_lenght[8]|max_lenght[16]');

$result=validation::validForm($rules,$_POST);

if($result)
{
if($this->user->getUserid(htmlentities($_POST['username'],ENT_QUOTES,'UTF-8'),
htmlentities($_POST['password'],ENT_QUOTES,'UTF-8'))===1)//sending to model page
{
session::set('login',true);

$this->view('/templates/header',['title'=>'','template'=>'','css'=>'']);
$this->view('/home/index');
$this->view('/templates/footer');
}
else
{
//????????????
}
}
else
{
//$this->view('/templates/header',['title'=>'','template'=>'','css'=>'']); ??????
//$this->view('/login/index',$result); ??????
//$this->view('/templates/footer'); ??????

//or use

//header('location: ' . URL . 'login');

}
}
else
{
header('location: ' . URL . 'login');
}

}



جاهای که علامت سوال گذاشتم :
بنظرتون باید از header استفاده کنم برای یا از $this->view در صورتیکه اگر بخوام از header استفاده کنم دیگه نمیتونم خطا ها رو ارسال کنم .
اگر از $this->view استفاده کنم اصول mvc رو رعایت کردم ؟؟؟؟؟

plague
چهارشنبه 19 اسفند 1394, 13:37 عصر
یه سیستمی مثل flash session راه بنداز
توی اون زخیره کن بعد با هدر ریدایرکت کن

منظور از فلش سشن نوعی سشن هستش که بعد از 1 بار ریدایرکت شدن خود به خود از بین بره

IMANAZADI
چهارشنبه 19 اسفند 1394, 14:54 عصر
میشه روش درست کردنش رو بگید لطفا

بعد راه حل کلی همین هست یا روش دیگه ای هم هست

plague
پنج شنبه 20 اسفند 1394, 09:00 صبح
سرچ کن php flash session تو نت نمونه زیاده

من خیلی کم از کلاس های ولیدیشن استفاده میکنم چون معمولا ایجکس کار میکنم و کار به رفرش و این حرفا نمیکشه و خودم ویدیشن میکنم
ولی توی فریم ورک هایی که من دیدم وقتی ولیدیشن fail میشه همون تو کنترلر اررور تولید میکنه و دیگه این به عهده خوده کاربره که چجوری منتقلش کنه به ویو و نشون بده

IMANAZADI
جمعه 21 اسفند 1394, 04:11 صبح
ولی توی فریم ورک هایی که من دیدم وقتی ولیدیشن fail میشه همون تو کنترلر اررور تولید میکنه و دیگه این به عهده خوده کاربره که چجوری منتقلش کنه به ویو و نشون بده

خوب ارور ما هم بعد از ولیدیشن به کنترلر ارسال میشه ، ولی مشکل من اینه چطوری بتونم خطا رو از کنترلر به view ارسال کنم

plague
جمعه 21 اسفند 1394, 08:54 صبح
منم گفتم که
وظیفه کاربره که منتقل کنه نه فریم ورک
اگرم میخای توی یه فلش سشن میریزی با همون نام input (مثلا username )
بعد وقتی داری فرم رو مینویسی تو ویو به ازای هر input میری فلش سشن رو چک میکنی برای وجود ارروری با همون نام و در صورت وجود چاپش میکنی


شکل سادش یه چزیی شبیه به این میشه اگه میخای خود فریم ورک تولید کنه



echo form_input(array('name'=>'username');

-------------------------------

function form_input($attrs=array()){

$export = '<input ';
foreach($attrs as $k=>$a)
$export .= " $k='$v' ";
$export .= " /> ";

if( isset($attrs['name']) && $this->get_flashsession($attrs['name']))
$export .= ' error : '.$this->get_flashsession($attrs['name']);
}