Yii2 Simple Feedback
Rating and comment feedback system that works out of the box for Yii2., (*1)
, (*2)
Installation
composer require "slinstj/yii2-simple-feedback:~1.0"
The most simple way to use
This way will use default configs., (*3)
1 - Put the Simple Feedback Widget in your view:, (*4)
// 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:, (*5)
// SiteController
...
public function actions()
{
return [
'rating' => [
'class' => 'slinstj\widgets\SimpleFeedback\actions\RatingAction',
],
];
}
3 - Run migration to create the table where ratings will be saved:, (*6)
# in your root directory, run:
php yii migrate --migrationPath=@vendor/slinstj/yii2-simple-feedback/src/migrations
And it is done!, (*7)
After the user do the rate, a success or danger alert will be displayed
in substitution to the widget:, (*8)
, (*9)
Supported languages
Brazillian Portuguese and English., (*10)
Advanced Usage
You can change almost all default configs. These are some configs you can change:, (*11)
- 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;
How change the default configs
Just pass the configs when calling the widget:, (*12)
// 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'];
}
],
]) ?>
Changing default route - full example
Note: Even if you change the default route, Simple Feedback will know how
redirect your user back to original route., (*13)
1 - Pass the configs to the widget:, (*14)
// in myview.php
use \slinstj\widgets\SimpleFeedback\SimpleFeedbackWidget;
?>
<?= SimpleFeedbackWidget::widget([
'formAction' => ['my-controller/rating'],
]) ?>
2 - Config the action to save the feedback data:, (*15)
// MyController <<<
...
public function actions()
{
return [
'rating' => [
'class' => 'slinstj\widgets\SimpleFeedback\actions\RatingAction',
],
And it is done., (*16)
VERY IMPORTANT, (*17)
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:, (*18)
// 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:, (*19)
// 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'];
}
]);
...
}
Using special placeholder {simplefeedback}
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:, (*20)
// 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() ?>
Next releases
- [ ] Ajax implementation;
- [ ] Handle repeated ratings;