, (*1)
Code Status
, (*2)
Installation
composer require "fbalabanov/yii2-comments:~1.0"
Configuration
In config /protected/config/main.php
, (*3)
<?php
return [
// ...
'modules' => [
// ...
'comments' => [
'class' => 'fbalabanov\yii\module\Comments\Module',
'userIdentityClass' => 'app\models\User',
'useRbac' => true,
]
],
// ...
];
In your User
model (or another model implements the interface IdentityInterface
) need to implement the interface "\fbalabanov\yii\module\Comments\interfaces\CommentatorInterface", (*4)
class User extends \yii\db\ActiveRecord
implements
\yii\web\IdentityInterface,
\fbalabanov\yii\module\Comments\interfaces\CommentatorInterface
{
// ...
public function getCommentatorAvatar()
{
return $this->avatar_url;
}
public function getCommentatorName()
{
return $this->name;
}
public function getCommentatorUrl()
{
return ['/profile', 'id' => $this->id]; // or false, if user does not have a public page
}
// ...
}
In auth manager add rules (if Module::$useRbac = true
):, (*5)
<?php
use \fbalabanov\yii\module\Comments\Permission;
use \fbalabanov\yii\module\Comments\rbac\ItsMyComment;
$AuthManager = \Yii::$app->getAuthManager();
$ItsMyCommentRule = new ItsMyComment();
$AuthManager->add($ItsMyCommentRule);
$AuthManager->add(new \yii\rbac\Permission([
'name' => Permission::CREATE,
'description' => 'Can create own comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
'name' => Permission::UPDATE,
'description' => 'Can update all comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
'name' => Permission::UPDATE_OWN,
'ruleName' => $ItsMyCommentRule->name,
'description' => 'Can update own comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
'name' => Permission::DELETE,
'description' => 'Can delete all comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
'name' => Permission::DELETE_OWN,
'ruleName' => $ItsMyCommentRule->name,
'description' => 'Can delete own comments',
]));
Updating database schema
After you downloaded and configured fbalabanov/yii2-comments
,
the last thing you need to do is updating your database schema by applying the migrations:, (*6)
In command line
:, (*7)
php yii migrate/up --migrationPath=@vendor/fbalabanov/yii2-comments/migrations/
Usage
In view, (*8)
<?php
// ...
use fbalabanov\yii\module\Comments;
echo Comments\widgets\CommentListWidget::widget([
'entity' => (string) 'photo-15', // type and id
]);
Parameters
 Module parameters
-
userIdentityClass (required, string) The user identity class that Yii2 uses to provide identity information about the users in the App., (*9)
-
useRbac (optional, boolean) Default TRUE. Defines if the comment system will use Rbac validation to check the comment permissions when trying to update, delete or add new comments., (*10)
-
modelClasses (optional, string[]) Stores the user defined model classes that will be used instead of the default ones in the comment system. Must have a key => classname format. e.g. 'Comment' => '@app\comments\CommentModel'
, (*11)
-
entity (required, string) The entity that will identify the comments under on section from all the comments in this module., (*12)
-
theme (optional, string) In case you want to use a theme in your application you should define here it's location., (*13)
-
viewParams (optional, array) Data that will be sent directly into the widget view files. Must have a key => data format. The key will be the variable name in the view. The variable CommentsDataProvider
it's already taken., (*14)
-
options (optional, array) Default ['class' => 'comments-widget']
. Option data array that will be sent into the div holding the comment system in your views., (*15)
-
pagination (optional, array) Pagination configuration that will be used in the comment panel.
Default data:, (*16)
public $pagination =
[
'pageParam' => 'page',
'pageSizeParam' => 'per-page',
'pageSize' => 20,
'pageSizeLimit' => [1, 50],
];
-
sort (optional, array) Type of sorting used to retrieve the comments into the panel. Can be sorted by any of the columns defined in the
comment
table.
Default data:
'defaultOrder' => [
'id' => SORT_ASC,
],
-
showDeleted (optional, boolean) Default True
. Defines if the comments panel will show a message indicating the deleted comments., (*17)
-
showCreateForm (optional, boolean) Default True
. Will show or hide the form to add a comment in this panel., (*18)
Extending the package
 Extending Model files
Depending on which ones you need, you can set the modelMap
config property:, (*19)
// ...
'modules' => [
// ...
'comments' => [
'class' => 'fbalabanov\yii\module\Comments\Module',
'userIdentityClass' => 'app\models\User',
'useRbac' => true,
'modelMap' => [
'Comment' => '@app\comments\CommentModel'
]
]
],
// ...
Attention: keep in mind that if you are changing the Comment
model, the new class should always extend the package's original Comment
class., (*20)
 Attaching behaviors and event handlers
The package allows you to attach behavior or event handler to any model. To do this you can set model map like so:, (*21)
// ...
'modules' => [
// ...
'comments' => [
'class' => 'fbalabanov\yii\module\Comments\Module',
'userIdentityClass' => 'app\models\User',
'useRbac' => true,
'modelMap' => [
'Comment' => [
'class' => '@app\comments\CommentModel',
'on event' => function(){
// code here
},
'as behavior' =>
['class' => 'Foo'],
]
]
],
// ...
Extending View files
You can extend the view files supplied by this package using the theme
component in the config file., (*22)
// app/config/web.php
'components' => [
'view' => [
'theme' => [
'pathMap' => [
'@vendor/fbalabanov/yii2-comments/widgets/views' => '@app/views/comments', // example: @app/views/comment/comment-form.php
],
],
],
],
To extend the widget code and behavior you only have to extend the widget classes and call them instead of the package's ones., (*23)