Yii Framework Forum: Issues With Cookbook's Events Examples - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • This topic is locked

Issues With Cookbook's Events Examples Ch.1 pages 14 & 15

#1 User is offline   Sho Ke 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 01-May 13

Posted 01 May 2013 - 10:36 AM

I've been coding along with the book without any issues until I got to page 14, where it demonstrates how to send an email notification upon a comment being added to a blog post.

Following the book, I have the following in protected/components/NewCommentEvent.php
<?php
class NewCommentEvent extends CModelEvent {
	public $comment;
	public $post;
}


After that, I added the following to the Post model in protected/models/Post.php. This model was created via Gii, and I left the auto-generated methods intact:
	function addComment(Comment $comment)
	{
		$comment->post_id = $this->id;
		// creating event class instance
		$event = new NewCommentEvent($this);
		$event->post = $this;
		$event->comment = $comment;
		// triggering event
		$this->onNewComment($event);
		return $event->isValid;
	}
	
	// defining onNewComment event
	public function onNewComment($event) 
	{
		// Event is actually triggered here. This way we can use
		// onNewComment method instead of raiseEvent.
		$this->raiseEvent('onNewComment', $event);
	}


Still following the book, I created protected/components/Notifier.php with the following contents:
<?php
class Notifier 
{
	function comment($event)
	{
		$text = "There was a new comment from
		 {$event->comment->author} on post {$event->post->title}";
		mail('idontknowwhattopu@live.com', 'New Comment', $text);
	}
}


Finally, I created the controller protected/controllers/PostController.php with the following:
<?php
class PostController extends CController
{
	function actionAddComment()
	{
		$post = Post::model()->findByPk(10);
		$notifier = new Notifier();
		var_dump($post);
		//adding the event handler
		$post->onNewComment = array($notifier, 'comment');
		
		//in production, this should come from $_POST
			$comment = new Comment();
			$comment->author = 'Sam Dark';
			$comment->text = 'Yii events are awesome!';
		
		//adding the comment
			$post->addComment($comment);
	}
}


When trying to run this via %siteName%/index.php/Post/AddComment, I get the following error along with a giant stack trace:

Quote

PHP warning
include(Comment.php): failed to open stream: No such file or directory


Before the stack trace, it points to line 421 of YiiBase.php:
Spoiler


From the looks if it, I think Yii is trying to find the file Commment.php because of line 13 in PostController.php, which was not defined in the book. Was the class definition of Comment accidentally omitted in the book, or am I just missing something?

Some additional information about the variables used in PostController.php:
var_dump($post) yields:
Spoiler


var_dump($notifier) yields:
Spoiler


Thanks in advance.
0

#2 User is offline   CeBe 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 567
  • Joined: 16-July 10
  • Location:Berlin. Germany

Posted 01 May 2013 - 10:59 AM

Of course you need to create a model class named Comment to have this to work.
It is mentioned on page 14 somewhere in the middle but should be obvious :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • This topic is locked

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