[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]