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/migrationsAnd 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;

