composer require "rmrevin/yii2-comments:~1.4"
In config /protected/config/main.php
<?php
return [
// ...
'modules' => [
// ...
'comments' => [
'class' => 'rmrevin\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 "\rmrevin\yii\module\Comments\interfaces\CommentatorInterface"
class User extends \yii\db\ActiveRecord
implements
\yii\web\IdentityInterface,
\rmrevin\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
):
<?php
use \rmrevin\yii\module\Comments\Permission;
use \rmrevin\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',
]));
After you downloaded and configured rmrevin/yii2-comments
,
the last thing you need to do is updating your database schema by applying the migrations:
In command line
:
php yii migrate/up --migrationPath=@vendor/rmrevin/yii2-comments/migrations/
In view
<?php
// ...
use rmrevin\yii\module\Comments;
echo Comments\widgets\CommentListWidget::widget([
'entity' => (string) 'photo-15', // type and id
]);
userIdentityClass (required, string) The user identity class that Yii2 uses to provide identity information about the users in the App.
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.
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'
entity (required, string) The entity that will identify the comments under on section from all the comments in this module.
theme (optional, string) In case you want to use a theme in your application you should define here it's location.
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.
options (optional, array) Default ['class' => 'comments-widget']
. Option data array that will be sent into the div holding the comment system in your views.
pagination (optional, array) Pagination configuration that will be used in the comment panel. Default data:
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.
showCreateForm (optional, boolean) Default True
. Will show or hide the form to add a comment in this panel.
Depending on which ones you need, you can set the modelMap
config property:
// ...
'modules' => [
// ...
'comments' => [
'class' => 'rmrevin\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.
The package allows you to attach behavior or event handler to any model. To do this you can set model map like so:
// ...
'modules' => [
// ...
'comments' => [
'class' => 'rmrevin\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'],
]
]
],
// ...
You can extend the view files supplied by this package using the theme
component in the config file.
// app/config/web.php
'components' => [
'view' => [
'theme' => [
'pathMap' => [
'@vendor/rmrevin/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.
foo/bar?id=1
)theme
to CommentFormWidget
theme
parameter into CommentListWidget
Comments