حل مشکل عدم کارکرد Seflash و Getflash در Yii + راه کار

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

[rtl]سلام.

شما اگه یک request بفرستید, Yii::app()->user->getFlash() خالی می شه. کاری که می تونید بکنید برای اینکه از functionality که Yii بهتون می ده استفاده کنید, می تونید یه echo تویYii::app()->user->getFlash() بذارین و ببینید کجا داره صدا زده می شه.[/rtl]

[rtl]متوجه منظورتون هستم ، خیلی تست کردم اما نتونستم پیداش کنم . بهرحال این روش فعلا جواب میده اگر هم روزی مشکل رو پیدا کنم میتونم با تغییر از کامپوننت به هدفم برسم و اصلاحش کنم[/rtl]