Yii Framework Forum: page 223 Trying to get property of non-object - Yii Framework Forum

Jump to content

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

page 223 Trying to get property of non-object

#1 User is offline   bluesun 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 23-March 12

Posted 27 March 2012 - 02:20 AM

Hi,

I am having some trouble with Chapter 9 of the book. Instead of getting the comments form on the issue listing page, I get a PHP notice: Trying to get property of non-object.

Here is the complete stacktrace:

PHP notice

Trying to get property of non-object

/home/deridder/NetBeansProjects/trackstar/protected/views/issue/_comments.php(5)

01 <?php foreach($comments as $comment): ?>
02 <div class="comment">
03     <div class="author">
04         
05         <?php echo $comment->author->username; ?>:
06     </div>
07     
08     <div class="time">
09         on <?php echo date('F j, Y \a\t h:i:a', strtotime($comment->create_time)); ?>
10     </div>
11     
12     <div class="content">
13         <?php echo nl2br(CHtml::encode($comment->content)); ?>        
14     </div>
15     <hr>
16     
17 </div> <!-- comment -->

Stack Trace
#0 	
+
 /home/deridder/yii/framework/web/CBaseController.php(127): require("/home/deridder/NetBeansProjects/trackstar/protected/views/issue/...")
#1 	
+
 /home/deridder/yii/framework/web/CBaseController.php(96): CBaseController->renderInternal("/home/deridder/NetBeansProjects/trackstar/protected/views/issue/...", array("comments" => array(Comment, Comment, Comment, Comment)), true)
#2 	
+
 /home/deridder/yii/framework/web/CController.php(870): CBaseController->renderFile("/home/deridder/NetBeansProjects/trackstar/protected/views/issue/...", array("comments" => array(Comment, Comment, Comment, Comment)), true)
#3 	
–
 /home/deridder/NetBeansProjects/trackstar/protected/views/issue/view.php(40): CController->renderPartial("_comments", array("comments" => array(Comment, Comment, Comment, Comment)))

35     <?php if($model->commentCount>=1): ?>
36     <h3>
37         <?php echo $model->commentCount>1 ? $model->commentCount.'comments' : 'One comment'; ?>
38     </h3>
39     
40     <?php $this->renderPartial('_comments', array('comments'=>$model->comments,)); ?>    
41     <?php endif; ?>
42     
43     <h3>Leave a comment</h3>
44     
45     <?php if (Yii::app()->user->hasFlash('commentSubmitted')): ?>

#4 	
+
 /home/deridder/yii/framework/web/CBaseController.php(127): require("/home/deridder/NetBeansProjects/trackstar/protected/views/issue/...")
#5 	
+
 /home/deridder/yii/framework/web/CBaseController.php(96): CBaseController->renderInternal("/home/deridder/NetBeansProjects/trackstar/protected/views/issue/...", array("model" => Issue, "comment" => Comment), true)
#6 	
+
 /home/deridder/yii/framework/web/CController.php(870): CBaseController->renderFile("/home/deridder/NetBeansProjects/trackstar/protected/views/issue/...", array("model" => Issue, "comment" => Comment), true)
#7 	
+
 /home/deridder/yii/framework/web/CController.php(783): CController->renderPartial("view", array("model" => Issue, "comment" => Comment), true)
#8 	
–
 /home/deridder/NetBeansProjects/trackstar/protected/controllers/IssueController.php(111): CController->render("view", array("model" => Issue, "comment" => Comment))

106         #));
107                 
108                 # changes made on page 220
109                 $issue = $this->loadModel($id);
110                 $comment = $this->createComment($issue);
111                 $this->render('view', array('model'=>$issue, 'comment'=>$comment,));
112     }
113 
114     /**
115      * Creates a new model.
116      * If creation is successful, the browser will be redirected to the 'view' page.

#9 	
 unknown(0): IssueController->actionView("1")
#10 	
+
 /home/deridder/yii/framework/web/actions/CAction.php(107): ReflectionMethod->invokeArgs(IssueController, array("1"))
#11 	
+
 /home/deridder/yii/framework/web/actions/CInlineAction.php(48): CAction->runWithParamsInternal(IssueController, ReflectionMethod, array("r" => "issue/view", "id" => "1"))
#12 	
+
 /home/deridder/yii/framework/web/CController.php(309): CInlineAction->runWithParams(array("r" => "issue/view", "id" => "1"))
#13 	
+
 /home/deridder/yii/framework/web/filters/CFilterChain.php(134): CController->runAction(CInlineAction)
#14 	
+
 /home/deridder/yii/framework/web/filters/CFilter.php(41): CFilterChain->run()
#15 	
+
 /home/deridder/yii/framework/web/CController.php(1146): CFilter->filter(CFilterChain)
#16 	
+
 /home/deridder/yii/framework/web/filters/CInlineFilter.php(59): CController->filterAccessControl(CFilterChain)
#17 	
+
 /home/deridder/yii/framework/web/filters/CFilterChain.php(131): CInlineFilter->filter(CFilterChain)
#18 	
+
 /home/deridder/yii/framework/web/CController.php(292): CFilterChain->run()
#19 	
+
 /home/deridder/yii/framework/web/CController.php(266): CController->runActionWithFilters(CInlineAction, array("accessControl", "projectContext + create index admin"))
#20 	
+
 /home/deridder/yii/framework/web/CWebApplication.php(276): CController->run("view")
#21 	
+
 /home/deridder/yii/framework/web/CWebApplication.php(135): CWebApplication->runController("issue/view")
#22 	
+
 /home/deridder/yii/framework/base/CApplication.php(162): CWebApplication->processRequest()
#23 	
–
 /home/deridder/NetBeansProjects/trackstar/index.php(13): CApplication->run()

08 defined('YII_DEBUG') or define('YII_DEBUG',true);
09 // specify how many levels of call stack should be shown in each log message
10 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
11 
12 require_once($yii);
13 Yii::createWebApplication($config)->run();




These are the code snippets that have been altered or added in this chapter:

In IssueController.php :
public function actionView($id)
	{
		#$this->render('view',array(
		#	'model'=>$this->loadModel($id),
		#));
                
                # changes made on page 220
                $issue = $this->loadModel($id);
                $comment = $this->createComment($issue);
                $this->render('view', array('model'=>$issue, 'comment'=>$comment,));
	}


Also in IssueController.php :
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;
        }


The file _comments.php
<?php foreach($comments as $comment): ?>
<div class="comment">
    <div class="author">
        <?php echo $comment->author->username; ?>:
    </div>
    
    <div class="time">
        on <?php echo date('F j, Y \a\t h:i:a', strtotime($comment->create_time)); ?>
    </div>
    
    <div class="content">
        <?php echo nl2br(CHtml::encode($comment->content)); ?>        
    </div>
    <hr>
    
</div> <!-- comment -->

<?php endforeach; ?>


I have checked for typo's, but I can't find any myself, maybe someone else can.

Thanks,

Edwin
0

#2 User is offline   spinningarrow 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 26-March 12

Posted 07 April 2012 - 12:18 PM

I'm having a similar issue when trying to access fields through relations.

The strange thing is that it works perfectly on a XAMPP server installed on OS X Lion, but throws a PHP notice (Trying to get property of non-object) on a WAMP servers installed on Windows 7. Any ideas, anyone?
0

#3 User is offline   spinningarrow 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 26-March 12

Posted 07 April 2012 - 12:40 PM

After a lot of searching, I finally found the answer on the forum on yiichina.com

The incomplete link is: topic/13199-help-with-model-relations-trying-to-access-a-non-object/ (apparently I'm not allowed to post links)

Basically, the error was occuring when one of the values returned was null. Probably the PHP version running on OS X (I think it's 5.3.1) was not objecting, while PHP 5.3.9 on Windows was.

Hope this helps someone!
0

#4 User is offline   clgarret 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 02-May 12

Posted 03 May 2012 - 10:35 AM

View Poststryder, on 07 April 2012 - 12:40 PM, said:

After a lot of searching, I finally found the answer on the forum on yiichina.com

The incomplete link is: topic/13199-help-with-model-relations-trying-to-access-a-non-object/ (apparently I'm not allowed to post links)

Basically, the error was occuring when one of the values returned was null. Probably the PHP version running on OS X (I think it's 5.3.1) was not objecting, while PHP 5.3.9 on Windows was.

Hope this helps someone!


It helped. I had a few comments with the user_ids unset - filling them in fixed the issue (though obviously ensuring that the individual fields are not empty before displaying them is obviously the least risky solution.
0

#5 User is offline   jaison007 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 23-August 12

Posted 03 September 2012 - 02:30 PM

Hey for all, an simple form to identify code errors is to download the book source code in:

packtpub

For this is necessary create an account.
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