Default Layout 'main' is not loaded/called

Iam facing strange problem. Only text in view file(index.php) is visible. And default layout ‘main.php’ is unable to load.

I haven’t disturbed anything. Only column1 and column2 files are deleted from default installation/settings.

Can some one guide me in this regards

Thanks in advance

Did you made sure that the main.php layout file exists under protected/views/layouts/main.php? what is your directory structure? do you use modules?

It was running fine. All of a sudden it happend. Yes ‘main.php’ is in its default location.

You have to set $this->layout = ‘main’ in the Controller.php (assuming you just deleted column1 and column2 files but forget to delete links to them).

Here is my controller labelled as "SiteController.php"




<?php


class SiteController extends Controller

{

	/**

	 * Declares class-based actions.

	 */

	public function actions()

	{

		return array(

			// captcha action renders the CAPTCHA image displayed on the contact page

			'captcha'=>array(

				'class'=>'CCaptchaAction',

				'backColor'=>0xFFFFFF,

			),

			// page action renders "static" pages stored under 'protected/views/site/pages'

			// They can be accessed via: index.php?r=site/page&view=FileName

			'page'=>array(

				'class'=>'CViewAction',

			),

		);

	}


	/**

	 * This is the default 'index' action that is invoked

	 * when an action is not explicitly requested by users.

	 */

	public function actionIndex()

	{

		// renders the view file 'protected/views/site/index.php'

		// using the default layout 'protected/views/layouts/main.php'

		$this->render('index');

	}


	/**

	 * This is the action to handle external exceptions.

	 */

	public function actionError()

	{

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

	    {

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

	    		echo $error['message'];

	    	else

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

	    }

	}


	/**

	 * Displays the contact page

	 */

	public function actionContact()

	{

		$model=new ContactForm;

		if(isset($_POST['ContactForm']))

		{

			$model->attributes=$_POST['ContactForm'];

			if($model->validate())

			{

				$headers="From: {$model->email}\r\nReply-To: {$model->email}";

				mail(Yii::app()->params['adminEmail'],$model->subject,$model->body,$headers);

				Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.');

				$this->refresh();

			}

		}

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

	}


	/**

	 * Displays the login page

	 */

	public function actionLogin()

	{

		$model=new LoginForm;


		// if it is ajax validation request

		if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')

		{

			echo CActiveForm::validate($model);

			Yii::app()->end();

		}


		// collect user input data

		if(isset($_POST['LoginForm']))

		{

			$model->attributes=$_POST['LoginForm'];

			// validate user input and redirect to the previous page if valid

			if($model->validate() && $model->login())

				$this->redirect(Yii::app()->user->returnUrl);

		}

		// display the login form

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

	}


	/**

	 * Logs out the current user and redirect to homepage.

	 */

	public function actionLogout()

	{

		Yii::app()->user->logout();

		$this->redirect(Yii::app()->homeUrl);

	}

}



Can you guide me further.

Thanks

I mean “protected/components/Controller.php” file. Check it’s layout property.

Thanks it solved my problem.

Can you guide me where can I get knowledge about importance of "protected/components/Controller.php"

As you can see, SiteController extends it instead of extending CController.

All other controllers should extend Controller too, because it defines some common properties like "breadcrumbs" and "menu" used by all your controllers (you must define them per each controller otherwise).

It also sets default layout to "column1.php", but since you are using own layout, you can omit that line.