PDA

View Full Version : کار نکردن setFlash (حل شد)



engmmrj
سه شنبه 08 بهمن 1392, 12:07 عصر
من در پروژهم از setFlash استفاده کردم پروژه دیگه از کار افتاد وقتی setFlash رو حذف کردم به درستی شروع به کار کرد .
راه حل آقا رضا رو هم تست کردم ولی جواب نداد !
http://forum.iranphp.org/Thread-%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D8%B9%D8%AF%D9%85-%DA%A9%D8%A7%D8%B1%DA%A9%D8%B1%D8%AF-seFlash-%D9%88-getFlash-%D8%AF%D8%B1-Yii-%D8%B1%D8%A7%D9%87-%DA%A9%D8%A7%D8%B1

engmmrj
سه شنبه 08 بهمن 1392, 12:08 عصر
public function actionCreate()
{
$model=new User;

// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);

if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];

if($model->save())
Yii::app()->user->setFlash('succse','ثبت نام شما با موفقیت انجام شد ، با شما تماس گرفته خواهد شد');
$this->refresh();
}

$this->render('create',array(
'model'=>$model,
));
}

MMSHFE
سه شنبه 08 بهمن 1392, 13:03 عصر
کد View خودتون رو هم بگذارین.

engmmrj
سه شنبه 08 بهمن 1392, 14:01 عصر
<?PHP if(Yii::app()->user->hasFlash('succse')):?>
<?PHP echo Yii::app()->user->getFlash('succse')?>
<?php endif;?>

MMSHFE
سه شنبه 08 بهمن 1392, 15:00 عصر
سمی کالن آخر دستور وسط رو بگذارین ببینید درست میشه؟

engmmrj
سه شنبه 08 بهمن 1392, 15:51 عصر
سمی کالن آخر دستور وسط رو بگذارین ببینید درست میشه؟

Yii::app()->user->setFlash('succse','ثبت نام شما با موفقیت انجام شد ، با شما تماس گرفته خواهد شد');
با این تکه کد مشکل داره ! وقتی اینو داخل کد باشه validate از کار می افته وقتی بر میدارم سیستم عملکرد صحیح خودشو انجام میده

MMSHFE
سه شنبه 08 بهمن 1392, 15:59 عصر
یه نکته ای که هست اینه که setFlash در اصل برای کاربری که لاگین کرده (Authenticated User) درنظر گرفته شده. برای مثال، وقتی کاربر Logout میکنه، نمیتونید پیغام خروج رو با setFlash تنظیم کنید. مثال:


Yii::app()->user->setFlash('success', 'Logout Successful!');
Yii::app()->user->logout();
$this->redirect(array('user/login'));

اینجا توی ویوی user/login نمیتونید با getFlash پیام رو بخونید چون سشن کاربر دیگه وجود نداره. به همین شکل کاربری که لاگین نکرده هم سشن نداره.
اگه بهم TeamViewer بدین (توی پیام خصوصی) شاید بتونم دقیقتر مشکل رو شناسایی و درجهت رفعش کمک کنم.

engmmrj
سه شنبه 08 بهمن 1392, 16:00 عصر
فکر کنم bug Yii باشه :لبخند:

MMSHFE
سه شنبه 08 بهمن 1392, 16:02 عصر
نه باگ نیست. باید دید شما چطوری استفاده کردین. در اکثر موارد بخاطر عدم مطالعه کامل مستنداته که نمیدونیم اجزای فریمورک چطور دارن کار میکنن و همینطوری ازشون استفاده میکنیم.

MMSHFE
سه شنبه 08 بهمن 1392, 16:19 عصر
مشکل همون بود که حدس زده بودم. کاربر لاگین نکرده و نمیتونید براش setFlash رو صدا بزنید چون سشن شروع به کار نکرده. اینجور وقتها قبل از اینکه setFlash رو صدا بزنید این دستور رو اجرا کنید:

Yii::app()->session->open();
تا سشن Yii شروع به کار کنه.

engmmrj
سه شنبه 08 بهمن 1392, 16:36 عصر
مشکل همون بود که حدس زده بودم. کاربر لاگین نکرده و نمیتونید براش setFlash رو صدا بزنید چون سشن شروع به کار نکرده. اینجور وقتها قبل از اینکه setFlash رو صدا بزنید این دستور رو اجرا کنید:

Yii::app()->session->open();
تا سشن Yii شروع به کار کنه.
نمیشه session رو auto کرد ؟

MMSHFE
سه شنبه 08 بهمن 1392, 16:51 عصر
بهتره که این کار انجام نشه چون همه جا به سشن نیاز نیست و بودن بی دلیلش Performance رو پایین میره ولی بهرحال میتونید دستور فوق رو توی کلاس Controller که توی components هست، توی متد init بگذارین تا با هر درخواست، اجرا بشه. اما مسئله اینه که توی مثالی که گفتم (logout) سشن بسته میشه چون session_destroy رو صدا میزنه و درنتیجه باید بطور دستی دوباره بازش کنید.

90299021
یک شنبه 27 بهمن 1392, 11:40 صبح
سلا م به همه دوستان دوست داشتنی.
setFlash چه کاری انجام می ده
با توضیح کامل لطفا

MMSHFE
یک شنبه 27 بهمن 1392, 11:54 صبح
با setFlash میتونید پیغام (با کلید دسترسی) تعیین کنید و توی 1 یا 2 درخواست بعدی، با hasFlash کلید رو چک کنید ببینید چنین پیغامی وجود داره یا نه و اگه بود، با getFlash پیغام رو بخونید و نمایش بدین (از Session برای نگهداری پیامها استفاده میشه). این پیغام بطور خودکار اگه تا 2 درخواست بعدی خونده نشه (با getFlash) بطور خودکار از بین میره.