Stuck On Page No. 223

As I progressed till page no. 220 everything went well & it was all right till addComment(). From there till page 223 I made all the changes in one go & now I am stuck because as I click on any issue link on project/view&id=1 page (eg- issue/view&id=1 or issue/create&pid=1) a blank page is being displayed. I have checked for all the typos in those code changes but could not find anything. Can anybody suggest me where should I look for possible mistakes?

Thanks in advance.

do you still have the errors?

Post your controller and view code

Here’s my IssueController code:-




class IssueController extends Controller

{

	/**

     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning

     * using two-column layout. See 'protected/views/layouts/column2.php'.

     */

	public $layout='//layouts/column2';

	

	/**

	* @var private property containing the associated Project model instance.

	*/

	private $_project = null;

	

	/**

     * @var CActiveRecord the currently loaded data model instance.

     */

	//private $_model;  //From codebase

	

	/**

	* Returns the project model instance to which this issue belongs

	*/

	public function getProject()

	{

		return $this->_project;

	}

	

	/**

	* Protected method to load the associated Project model class

	* @project_id the primary identifier of the associated Project

	* @return object the Project data model based on the primary key

	*/

	protected function loadProject($project_id)

	{

		// if the project property is null, create it based on input id

		if($this->_project === null)

		{

			$this->_project = Project::model()->findbyPK($project_id);

			if($this->_project === null)

			{

				throw new CHttpException(404,'The requested project does not exists.');

			}

		}

		return $this->_project;

	}


	/**

     * @return array action filters

     */

	public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

			'projectContext + create index admin', // check to ensure valid project context

		);

	}


	/**

     * Specifies the access control rules.

     * This method is used by the 'accessControl' filter.

     * @return array access control rules

     */

	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view'),

				'users'=>array('@'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}


	/**

     * Displays a particular model.

     * @param integer $id the ID of the model to be displayed

     */

	public function actionView($id)

	{

		$issue = $this->loadModel($id);

		$comment = $this->createComment($issue);

		$this->render('view',array(

			'model' => $issue,

			'comment' => $comment,

		));

	}

	

	protected function createComment($issue)

	{

		$comment = new Comment;

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

		{

			$comment->attributes = $_POST['Comment'];

			if(issue->addComment($comment))

			{

				Yii::app()->user->setFlash('commentSubmitted', "Your comment has been added.");

				$this->refresh();

			}

		}

		return $comment;

	}


	/**

     * Creates a new model.

     * If creation is successful, the browser will be redirected to the 'view' page.

     */

	public function actionCreate()

	{

		$model=new Issue;

		$model->project_id = $this->_project->id;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


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

		{

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

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}


	/**

     * Updates a particular model.

     * If update is successful, the browser will be redirected to the 'view' page.

     * @param integer $id the ID of the model to be updated

     */

	public function actionUpdate($id)

	{

		$model=$this->loadModel($id);

		$this->loadProject($model->project->id);


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


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

		{

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

			if($model->save())

				$this->redirect(array('view','pid'=>$model->id));

		}

		

		$this->render('update',array(

			'model'=>$model,

		));

	}


	/**

     * Deletes a particular model.

     * If deletion is successful, the browser will be redirected to the 'admin' page.

     * @param integer $id the ID of the model to be deleted

     */

	public function actionDelete($id)

	{

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

		{

			// we only allow deletion via POST request

			$this->loadModel($id)->delete();


			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

			if(!isset($_GET['ajax']))

				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

		}

		else

			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

	}


	/**

     * Lists all models.

     */

	public function actionIndex()

	{

		$dataProvider=new CActiveDataProvider('Issue', array(

					'criteria' => array(

						'condition' => 'project_id=:projectId',

						'params' => array(':projectId' => $this->_project->id),

						),

					));

		$this->render('index',array(

			'dataProvider'=>$dataProvider,

		));

	}


	/**

     * Manages all models.

     */

	public function actionAdmin()

	{

		$model=new Issue('search');

		$model->unsetAttributes();  // clear any default values

		if(isset($_GET['Issue']))

			$model->attributes=$_GET['Issue'];

		$model->project_id = $this->_project->id;


		$this->render('admin',array(

			'model'=>$model,

		));

	}


	/**

     * Returns the data model based on the primary key given in the GET variable.

     * If the data model is not found, an HTTP exception will be raised.

     * @param integer the ID of the model to be loaded

     */

	public function loadModel($id)

	{

		$model=Issue::model()->findByPk($id);

		if($model===null)

			throw new CHttpException(404,'The requested page does not exist.');

		return $model;

	}


	/**

     * Performs the AJAX validation.

     * @param CModel the model to be validated

     */

	protected function performAjaxValidation($model)

	{

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

		{

			echo CActiveForm::validate($model);

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

		}

	}

	

	/**

	* In-class defined filter method, configured for use in the above filters() method

	* It is called before the actionCreate() action method is run in order to ensure a proper

	* project context

	*/


	public function filterProjectContext($filterChain)

	{

		//set the project identifier based on either the GET or POST input

		//request variables, since we allow both types for our actions

		$projectId = null;

		if(isset($_GET['pid']))

			$projectId = $_GET['pid'];

		else

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

				$projectId = $_POST['pid'];

		$this->loadProject($projectId);

		//complete the running of other filters and execute the requested action

		$filterChain->run();

	}

}

& here’s my views/issue/view.php code :-


$this->breadcrumbs=array(

	'Issues'=>array('index'),

	$model->name,

);


$this->menu=array(

	array('label'=>'List Issue', 'url'=>array('index', 'pid' => $model->project->id)),

	array('label'=>'Create Issue', 'url'=>array('create', 'pid' => $model->project->id)),

	array('label'=>'Update Issue', 'url'=>array('update', 'id' => $model->id)),

	array('label'=>'Delete Issue', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->id),'confirm'=>'Are you sure you want to delete this item?')),

	array('label'=>'Manage Issue', 'url'=>array('admin', 'pid' => $model->project->id)),

);

?>




[b]View Issue #id; ?>[/b]




widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		'id',

		'name',

		'description',

		array(

			'name' =>'type_id',

			'value' => CHtml::encode($model->getTypeText())

		),

		array(

			'name' => 'status_id',

			'value' => CHtml::encode($model->getStatusText())

		),

		array(

			'name' => 'owner_id',

			'value' => CHtml::encode($model->owner->username)

		),

		array(

			'name' => 'requester_id',

			'value' => CHtml::encode($model->requester->username)

		),

		//'create_time',

		//'create_user_id',

		//'update_time',

		//'update_user_id',

	),

)); ?>




	commentCount>=1): ?>

		

[b]

			commentCount>1 ? $model->commentCount . 'comments' : 'One comment';  ?>

		[/b]


		

		renderPartial('_comments',array(

			'comments'=>$model->comments,

			)); ?>

			

	

	

	

[b]Leave a Comment[/b]


	

	user->hasFlash('commentSubmitted')): ?>

		

			user->getFlash('commentSubmitted'); ?>

		

	

	renderPartial('/comment/_form',array(

					'model'=>$comment,

					)); ?>

	

	



Yes I still have the errors. I have posted my Issuecontroller & issue/view.php code. Please do have a look.

Can you please echo some text in the actionView method and tell us the result? I.e. are you even reaching the controller?

In fact I did try to echo text in the actionView() method before posting here in the forum but the result was same - a blank page. So apparently I can not reach to the controller.

Found out the first typo on the page - in createComment() method. It was


if(issue->addComment($comment))

instead of


if($issue->addComment($comment))

But still in case of trackstar/index.php?r=issue/create&pid=1 link on project details page warnings are being shown. I am putting the detail stacktrace as follows -


PHP warning


include(create_user_id.php): failed to open stream: No such file or directory


/var/www/yii/framework/YiiBase.php(418)


406             	{

407                 	foreach(self::$_includePaths as $path)

408                 	{

409                     	$classFile=$path.DIRECTORY_SEPARATOR.$className.'.php';

410                     	if(is_file($classFile))

411                     	{

412                         	include($classFile);

413                         	break;

414                     	}

415                 	}

416             	}

417             	else

418                 	include($className.'.php');

419         	}

420         	else  // class name with namespace in PHP 5.3

421         	{

422             	$namespace=str_replace('\\','.',ltrim($className,'\\'));

423             	if(($path=self::getPathOfAlias($namespace))!==false)

424                 	include($path.'.php');

425             	else

426                 	return false;

427         	}

428         	return class_exists($className,false) || interface_exists($className,false);

429     	}

430     	return true;


Stack Trace

#0 	

+

 /var/www/yii/framework/YiiBase.php(418): YiiBase::autoload()

#1 	

+

 /var/www/yii/framework/YiiBase.php(298): YiiBase::autoload("create_user_id")

#2 	

+

 /var/www/yii/framework/validators/CValidator.php(171): YiiBase::import("create_user_id", true)

#3 	

+

 /var/www/yii/framework/base/CModel.php(285): CValidator::createValidator("create_user_id", Issue, "project_id, type_id, status_id, owner_id, requester_id", array(0 => "update_user_id", 1 => "numerical", "integerOnly" => true))

#4 	

+

 /var/www/yii/framework/base/CModel.php(259): CModel->createValidators()

#5 	

+

 /var/www/yii/framework/base/CModel.php(302): CModel->getValidators("name")

#6 	

+

 /var/www/yii/framework/web/helpers/CHtml.php(1185): CModel->isAttributeRequired("name")

#7 	

+

 /var/www/yii/framework/web/widgets/CActiveForm.php(560): CHtml::activeLabelEx(Issue, "name", array())

#8 	

–

 /var/www/trackstar/protected/views/issue/_form.php(13): CActiveForm->labelEx(Issue, "name")


08 	Fields with * are required.




09 

10 	errorSummary($model); ?>

11 

12 	

13     	labelEx($model,'name'); ?>

14     	textField($model,'name',array('size'=>60,'maxlength'=>256)); ?>

15     	error($model,'name'); ?>

16 	

17 

18 	


#9 	

+

 /var/www/yii/framework/web/CBaseController.php(127): require("/var/www/trackstar/protected/views/issue/_form.php")

#10 	

+

 /var/www/yii/framework/web/CBaseController.php(96): CBaseController->renderInternal("/var/www/trackstar/protected/views/issue/_form.php", array("model" => Issue), true)

#11 	

+

 /var/www/yii/framework/web/CController.php(870): CBaseController->renderFile("/var/www/trackstar/protected/views/issue/_form.php", array("model" => Issue), true)

#12 	

–

 /var/www/trackstar/protected/views/issue/create.php(15): CController->renderPartial("_form", array("model" => Issue))


10 );

11 ?>

12 

13 

[b]Create Issue[/b]


14 

15 renderPartial('_form', array('model'=>$model)); ?>


#13 	

+

 /var/www/yii/framework/web/CBaseController.php(127): require("/var/www/trackstar/protected/views/issue/create.php")

#14 	

+

 /var/www/yii/framework/web/CBaseController.php(96): CBaseController->renderInternal("/var/www/trackstar/protected/views/issue/create.php", array("model" => Issue), true)

#15 	

+

 /var/www/yii/framework/web/CController.php(870): CBaseController->renderFile("/var/www/trackstar/protected/views/issue/create.php", array("model" => Issue), true)

#16 	

+

 /var/www/yii/framework/web/CController.php(783): CController->renderPartial("create", array("model" => Issue), true)

#17 	

–

 /var/www/trackstar/protected/controllers/IssueController.php(130): CController->render("create", array("model" => Issue))


125             	$this->redirect(array('view','id'=>$model->id));

126     	}

127 

128     	$this->render('create',array(

129         	'model'=>$model,

130     	));

131 	}

132 

133 	/**

134      * Updates a particular model.

135      * If update is successful, the browser will be redirected to the 'view' page.


#18 	

+

 /var/www/yii/framework/web/actions/CInlineAction.php(50): IssueController->actionCreate()

#19 	

+

 /var/www/yii/framework/web/CController.php(309): CInlineAction->runWithParams(array("r" => "issue/create", "pid" => "1"))

#20 	

+

 /var/www/yii/framework/web/filters/CFilterChain.php(134): CController->runAction(CInlineAction)

#21 	

+

 /var/www/trackstar/protected/controllers/IssueController.php(254): CFilterChain->run()

#22 	

+

 /var/www/yii/framework/web/filters/CInlineFilter.php(59): IssueController->filterProjectContext(CFilterChain)

#23 	

+

 /var/www/yii/framework/web/filters/CFilterChain.php(131): CInlineFilter->filter(CFilterChain)

#24 	

+

 /var/www/yii/framework/web/filters/CFilter.php(41): CFilterChain->run()

#25 	

+

 /var/www/yii/framework/web/CController.php(1146): CFilter->filter(CFilterChain)

#26 	

+

 /var/www/yii/framework/web/filters/CInlineFilter.php(59): CController->filterAccessControl(CFilterChain)

#27 	

+

 /var/www/yii/framework/web/filters/CFilterChain.php(131): CInlineFilter->filter(CFilterChain)

#28 	

+

 /var/www/yii/framework/web/CController.php(292): CFilterChain->run()

#29 	

+

 /var/www/yii/framework/web/CController.php(266): CController->runActionWithFilters(CInlineAction, array("accessControl", "projectContext + create index admin"))

#30 	

+

 /var/www/yii/framework/web/CWebApplication.php(276): CController->run("create")

#31 	

+

 /var/www/yii/framework/web/CWebApplication.php(135): CWebApplication->runController("issue/create")

#32 	

+

 /var/www/yii/framework/base/CApplication.php(162): CWebApplication->processRequest()

#33 	

+

 /var/www/trackstar/index.php(13): CApplication->run() 

Are you in debug mode?

create_user_id is a DB field? If so, why is it being treated like a validator? Please post your IssueModel.

Thanks.

Forgive me but I am unaware of what this debug mode is. Though your suggestions are proving to be of immense help. All my problem with the page are solved. What I found out was - in the rules() method of issue model class I mistakenly wrote


array('project_id, type_id, status_id, owner_id, requester_id', 'create_user_id', 'update_user_id', 'numerical', 'integerOnly'=>true),

instead of


array('project_id, type_id, status_id, owner_id, requester_id, create_user_id, update_user_id', 'numerical', 'integerOnly'=>true),

If you could little bit explain how you found this out, it would help me better understand this code. Thank you very much.

Debug mode - always work in debug mode. It’ll display the errors so you don’t have to trudge through the log files.

How I debugged:

Your log file has the error/warning


/var/www/yii/framework/base/CModel.php(285): CValidator::createValidator("create_user_id", Issue, "project_id, type_id, status_id, owner_id, requester_id", array(0 => "update_user_id", 1 => "numerical", "integerOnly" => true))

This tells us that your code (probably located in your model, since models are the usual place to store validation rules) is trying to instantiate a new validation rule called create_user_id.

At the end of the same line, it is also trying to validate integers. This is what gave it away. Usually, a single validation rule (numerical, exists, unique etc) is used per line.

Glad it works now,

Matt

Thank you very much for your support. Glad you helped.