Rating and comment feedback system that works out of the box for Yii2.
composer require "slinstj/yii2-simple-feedback:~1.0"
This way will use default configs.
1 - Put the Simple Feedback Widget in your view:
// in myview.php
use \slinstj\widgets\SimpleFeedback\SimpleFeedbackWidget;
?>
// put it wherever you preffer in your view:
<?= SimpleFeedbackWidget::widget() ?>
2 - Config the action to save the feedback data:
// SiteController
...
public function actions()
{
return [
'rating' => [
'class' => 'slinstj\widgets\SimpleFeedback\actions\RatingAction',
],
];
}
3 - Run migration to create the table where ratings will be saved:
# in your root directory, run:
php yii migrate --migrationPath=@vendor/slinstj/yii2-simple-feedback/src/migrations
And it is done!
After the user do the rate, a success or danger alert will be displayed in substitution to the widget:
Brazillian Portuguese and English.
You can change almost all default configs. These are some configs you can change:
- DB config name;
- Table and fields names;
- Labels used for rating and comment attributes;
- Rules used for the form model;
- Route that will receive the post form data;
- The target value identifying what is being rated. You can use either a string or a callback function;
Just pass the configs when calling the widget:
// IMPORTANT:
// Please, refer to public attributes docblocks either in SimpleFeedbackWidget
// and SimpleFeedbackModel to see all available options.
<?= SimpleFeedbackWidget::widget([
'formAction' => ['my-controller/my-custom-rating-action'],
'isRatingAvailable' => true,
'isCommentAvailable' => false,
'modelConfigs' => [
'dbConfigName' => 'other_db_config',
'dbTable' => 'my_custom_table',
...
// using a callback but could be just a string
'targetValue' => function($model) {
// do your logic to define the target value
return \Yii::$app->params['something'];
}
],
]) ?>
Note: Even if you change the default route, Simple Feedback will know how redirect your user back to original route.
1 - Pass the configs to the widget:
// in myview.php
use \slinstj\widgets\SimpleFeedback\SimpleFeedbackWidget;
?>
<?= SimpleFeedbackWidget::widget([
'formAction' => ['my-controller/rating'],
]) ?>
2 - Config the action to save the feedback data:
// MyController <<<
...
public function actions()
{
return [
'rating' => [
'class' => 'slinstj\widgets\SimpleFeedback\actions\RatingAction',
],
And it is done.
VERY IMPORTANT
If you have changed default configs for the model (modelConfigs
), for example, dbTable
, targetValue
, etc, you must pass the same configs when configuring your action:
// MyController
...
public function actions()
{
return [
'rating' => [
'class' => 'slinstj\widgets\SimpleFeedback\actions\RatingAction',
'modelConfigs' => [
'dbTable' => 'my_custom_table',
'targetValue' => function($model) {
// do your logic to define the target value
return \Yii::$app->params['something'];
}
],
],
Or, if you preffer to use your own inline action, you should pass those custom configs when instantiating SimpleFeedbackModel
. For example:
// MyController
...
public function myInlineAction()
{
$model = new SimpleFeedbackModel([
'dbTable' => 'my_custom_table',
'targetValue' => function($model) {
// do your logic to define the target value
return \Yii::$app->params['something'];
}
]);
...
}
If for any reason you need insert simple feedback inside a text you can
also use begin()
, end()
and the special placeholder to achieve it:
// in your view
use \slinstj\widgets\SimpleFeedback\SimpleFeedbackWidget;
?>
...
<?php SimpleFeedbackWidget::begin([
// configs here
]) ?>
This text is more readable since we are using our widget
through a special placeholder.
Now I can keep my text clean but still have the widget.
<hr>
{simplefeedback}
<?php SimpleFeedbackWidget::end() ?>
- Ajax implementation;
- Handle repeated ratings;