اضافه کردن خطای دلخواه

[rtl]

با سلام.

همه دوستان با صفحه خطای فریمورک آشنایی دارند.

[center]

[/center]سوالم اینه که چطور می تونم اطلاعات مربوط به خطایی را به طور دلخواه به این صفحه اضافه کنم؟

[/rtl]

[right][font="Tahoma"]منظور شما خطایی که پارسر میگیره هست یا خطاهایی که مربوط به سایت و کاربران هست؟[/font][/right]

[rtl]خودم می خوام خطار را تولید کنم و اون پارامترهایی را که لازم دارم و مقادیرشان را موقع خطا ببینم. اصطلاحا بهش میگن watch

[/rtl]

[font="Tahoma"][rtl]یه نگاهی به فایل yii/framework/views/exception.php بندازین و بحث ErrorReporting رو در Yii بررسی کنید، روش کار دستتون میاد. بخصوص بحث مدیریت CException (خطاهای نوع CHttpException ویوهای جداگانه دارن).[/rtl][/font]

[font="Tahoma"][rtl]سلام،

قبل از هر چیز مطمئن بشو این دو دستور در index.php حذف و یا کامنت شدند.[/rtl]


defined('YII_DEBUG') or define('YII_DEBUG',true);

defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

[rtl]سپس در فایل config/main.php این بخش رو موقتاً کامنت کن:[/rtl]


'errorHandler'=>array(

	'errorAction'=>'site/error',

),

[rtl]حالا در شاخه view ، یک شاخه جدید با نام system بساز.

سپس یک فایل با نام error500.php درون اون ایجاد کن و پیغام مورد نظری که دوست داری نمایش داده بشه رو در اون بنویس.

توجه کن این فقط برای سفارشی سازی خطاهای 500 هست (یعنی مثل همین خطایی که شما عکسش رو قرار دادید) و برای خطاهای دیگه باید فایل مربوطه رو ایجاد کنید. مثلاً فایهای error404.php , error400.php , error400.php , error503.php و در هر یک پیغام خطای مناسب رو باید بنویسی.

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


$data['code']

$data['message']

$data['admin']

$data['time']

$data['version']

[rtl]و شاید هم بیشتر…

الان احتمالاً وقتی تست کنی با یک مسئله رو برو میشی و اون اینکه مشاهده میکنی که سایت در layout و قالب سایت نمایش داده نمیشه.

برای حل این مشکل شما بایستی این کارو بکنید:

اول از همه این بخش رو که گفتم موقتاً کامنت کن رو از کامنت خارج کن:[/rtl]


'errorHandler'=>array(

	'errorAction'=>'site/error',

),

[rtl]حالا همه خطا ها به اکشن site/error هدایت میشن.

اکشن error رو ایجاد کن و یک همچین کدی رو درون اون بنویس:[/rtl]


	public function actionError()

	{

		if($error=Yii::app()->errorHandler->error)

		{

			if(Yii::app()->request->isAjaxRequest)

				echo $error['message'];

			else

    			$this->render('error', $error);

		}

	}

[rtl]سپس view مربوطه error رو ایجاد کن و با استفاده از متغییر های:[/rtl]


$code

$type

$errorCode

$message

$line

[rtl]خطاهای مورد نظرت رو شکل بده.

اگر توی همین view یه var_dump($error)‎ بزنی، متغییر های هیجان انگیزتری رو خواهی یافت ;)

بدین صورت پیغام ها در چهار چوب قالب شما لود خواهند شد.

تموم شد!

موفق باشی.

نبی

[/rtl]

[/font]