[font="Tahoma"][rtl]برای نمایش پیغامهای یکبار مصرف ، از setFlash و getFlash استفاده میشه .
سورس کلاس CWebUser رو اگه نگاه کنید ، از setStat برای ذخیره اطلاعات و پیغامها استفاده میشه .
من نمیدونم چه مشکلی پیش اومده که وقتی بعد از setFlash یک ریدارکت انجام میدم به صفحه دیگه ، اونجا پیغام نشون داده نمیشه !!!
هر چقدر هم بررسی کردم مشکل رو پیدا نکردم ، به ناچار راه کار خودم رو پیاده کردم ، این سه تا متد setFlash , hasFlash , getFlash رو خودم بازنویسی کردم و از کش برای ذخیره اطلاعات استفاده کردم .
شاید شما هم همچین مشکلی داشته باشید اینم راه حل
اول توی فایل کانفیگ فریم ورک معمولا فایل main.php
قسمت components کلاس یوزر که به طور پیشفرض ست نشده (پس از CWebUser استفاده میکنه) ، رو خودمون ست میکنیم که از کلاس WebUser استفاده کنه .
یعنی تبدیل
[/rtl][/font]
'user'=>array(
'allowAutoLogin'=>true,
'loginUrl'=>array('xmain/login'),
),
[font="Tahoma"][rtl]به[/rtl][/font]
'user'=>array(
'class'=>'WebUser' ,
'allowAutoLogin'=>true,
'loginUrl'=>array('xmain/login'),
),
[font="Tahoma"][rtl]
سپس توی شاخه protected/components یک فایل میسازیم به اسم WebUser.php با دستورات[/rtl][/font]
<?php
// @reza ~ rezaonline.net
class WebUser extends CWebUser
{
public function setFlash($key,$val,$default=null)
{
$all = Yii::app()->cache->get('_flash');
$all[$key] = $val;
Yii::app()->cache->delete('_flash');
Yii::app()->cache->set('_flash', $all ,200);
}
public function hasFlash($key)
{
$all = Yii::app()->cache->get('_flash') ;
if( ! empty($all[$key]))
return true;
return false;
}
public function getFlash($key,$defaultValue=null,$delete=false)
{
if($this->hasFlash($key))
{
$all = Yii::app()->cache->get('_flash') ;
$ret = $all[$key];
$all[$key] = NULL;
Yii::app()->cache->delete('_flash');
Yii::app()->cache->set('_flash', $all ,200);
return $ret;
}
return '';
}
}
[font="Tahoma"][rtl]
حالا دیگه مثل قبل از setFlash و getFlash استفاده کنید .
موفق باشید[/rtl][/font]