sfPropelActAsCommentableBehaviorPlugin - 0.2.0

Propel commentable behavior

You are currently browsing
the website for symfony 1

Visit the Symfony2 website

« Back to the Plugins Home


Forgot your password?
Create an account



advanced search
Information Readme Releases Changelog Contribute
Show source | Show as Markdown



This behavior permits to attach comments to Propel objects. It provides a module for enabling comments in your application in less than 3 minutes.


  • add/remove comment(s) on an object
  • unit-tested
  • comment module, with ajax support and layout customization
  • comment admin-module


sfPropelActAsCommentableBehaviorPlugin_comment_1.png sfPropelActAsCommentableBehaviorPlugin_comment_2.png sfPropelActAsCommentableBehaviorPlugin_comment_3.png

Philosophy of the stuff

  • commentable objects must have a primary key
  • comments can only be attached on objects that have already been saved
  • comments are saved when applied

Get it installed

  • go to your project's root

  • Install the plugin:

     ./symfony plugin-install http://plugins.symfony-project.com/sfPropelActAsCommentableBehaviorPlugin
  • if not already done, enabled behaviors in config/propel.ini:

     propel.builder.addBehaviors = true
  • edit the classes that you want to make taggable. For instance, for lib/model/Post.php:

    [php] getTitle(); ?>

getText(); ?>

include_component('sfComment', 'commentList', array('object' => $post));
include_component('sfComment', 'commentForm', array('object' => $post));

Attaching comments to a commentable object

Consider a Propel "Post" class:

class Post extends BasePost
sfPropelBehavior::add('Post', array('sfPropelActAsCommentableBehavior'));

When the sfPropelActAsCommentableBehaviorPlugin is applied to the Post class, that class automagically gets commentable:

    $post = new Post();
    // blah
    $post->addComment('This is a cool comment.');
    $post->addComment(array('title' => 'this is a cool title', 'text' => 'this is a cool comment', 'author_id' => sfContext::getInstance()->getUser()->getUserId()));
    $post->addComment(array('This is a cool comment.', 'this is one other comment'));
### Retrieving one object's comments
It is possible to retrieve comments from a commentable object:
    $post = PostPeer::retrieveByPk(1);
    $comments = $post->getComments();
    foreach ($comments as $comment)
      echo '<p>'.$comment->getText().'</p>';

Removing one object's comment

Of course, comments can also be removed:

$post = PostPeer::retrieveByPk(1);


The behavior implement the following methods: * addComment($comment) - Adds a comment to the object. The "comment" param can be an associative array (in which each element represents one of the comment properties), or an array of associative arrays. In this case, it adds all the comments to the object. * clearComments() - Deletes all the comments attached to the object * getComments($options = array()) - Returns the list of the comments attached to the object. The options array can contain several options * getNbComments() - Returns the number of the comments attached to the object. * removeComment($comment_id) - Removes one comment from the object.

Unit testing

The plugin has been deeply unit-tested. The tests are located in test/unit/sfPropelActAsCommentableBehaviorTest.php. If you want to run them: * install the plugin * configure a model for using it, for instance "Post" * edit this file and, if required, modify the application name and the TEST_CLASS constant, line 3:

     define('TEST_CLASS', 'Post');
  • run the tests:

     php plugins/sfPropelActAsCommentableBehaviorPlugin/test/unit/sfPropelActAsCommentableBehaviorTest.php

License and credits

This plugin is licensed under the MIT license. You can contact the maintainer at xavier@lacot.org


version 0.2 - 2007-09-26

  • added a Symfony module for posting and displaying comments
    • ajax support
    • authenticated users support
    • form customization
  • added an administration module

version 0.1 - 2007-09-13

Initial public release. Features comments attachment to heterogene Propel objects.

Roadmap / Wishlist

  • handle other custom fields in comments
  • handle comment namespaces (front-office comments, back-office comments, etc.)