Yii Framework Forum: Stuck On Page No. 223 - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Stuck On Page No. 223 Issue details are not getting displayed

#1 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 23 September 2012 - 12:42 AM

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.
0

#2 User is offline   obinna 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 28-November 11
  • Location:Lagos, Nigeria

Posted 25 September 2012 - 11:56 AM

do you still have the errors?
0

#3 User is offline   waterloomatt 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 545
  • Joined: 09-April 10

Posted 25 September 2012 - 12:32 PM

Post your controller and view code
0

#4 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 26 September 2012 - 03:58 AM

View Postwaterloomatt, on 25 September 2012 - 12:32 PM, said:

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,
					)); ?>
	
	

0

#5 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 26 September 2012 - 03:59 AM

View Postobinna, on 25 September 2012 - 11:56 AM, said:

do you still have the errors?


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

#6 User is offline   waterloomatt 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 545
  • Joined: 09-April 10

Posted 26 September 2012 - 07:53 AM

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

#7 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 26 September 2012 - 11:53 AM

View Postwaterloomatt, on 26 September 2012 - 07:53 AM, said:

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.
0

#8 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 26 September 2012 - 12:44 PM

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() 

0

#9 User is offline   waterloomatt 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 545
  • Joined: 09-April 10

Posted 26 September 2012 - 02:30 PM

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.
0

#10 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 27 September 2012 - 04:21 AM

View Postwaterloomatt, on 26 September 2012 - 02:30 PM, said:

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.
0

#11 User is offline   waterloomatt 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 545
  • Joined: 09-April 10

Posted 27 September 2012 - 07:17 AM

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
0

#12 User is offline   Ash_R 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 22-January 12
  • Location:India

Posted 28 September 2012 - 01:04 AM

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users