Commit 9c287cb6 by Qiang Xue

Fixes #5663 and #5671: Added support for using `data-params` to specify…

Fixes #5663 and #5671: Added support for using `data-params` to specify additional form data to be submitted via the `data-method` approach
parent 80cc9cc1
...@@ -4,6 +4,7 @@ Yii Framework 2 Change Log ...@@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.3 under development 2.0.3 under development
----------------------- -----------------------
- Enh #5663: Added support for using `data-params` to specify additional form data to be submitted via the `data-method` approach (usualdesigner, qiangxue)
- Enh #6106: Added ability to specify `encode` for each item of `yii\widgets\Breadcrumbs` (samdark, aleksanderd) - Enh #6106: Added ability to specify `encode` for each item of `yii\widgets\Breadcrumbs` (samdark, aleksanderd)
- Enh #6697: Added `yii\helpers\Url::current()` method that allows adding or removing parameters from current URL (samdark, callmez) - Enh #6697: Added `yii\helpers\Url::current()` method that allows adding or removing parameters from current URL (samdark, callmez)
- Chg #5690: adjusted paths in message config generated by `yii message/config` to reflect directory structure better (mikehaertl, samdark) - Chg #5690: adjusted paths in message config generated by `yii message/config` to reflect directory structure better (mikehaertl, samdark)
......
...@@ -121,6 +121,26 @@ yii = (function ($) { ...@@ -121,6 +121,26 @@ yii = (function ($) {
* If the `data-method` attribute is not defined, the `href` attribute (if any) of the element * If the `data-method` attribute is not defined, the `href` attribute (if any) of the element
* will be assigned to `window.location`. * will be assigned to `window.location`.
* *
* Starting from version 2.0.3, the `data-params` attribute is also recognized when you specify
* `data-method`. The value of `data-params` should be a JSON representation of the data (name-value pairs)
* that should be submitted as hidden inputs. For example, you may use the following code to generate
* such a link:
*
* ```php
* use yii\helpers\Html;
* use yii\helpers\Json;
*
* echo Html::a('submit', ['site/foobar'], [
* 'data' => [
* 'method' => 'post',
* 'params' => [
* 'name1' => 'value1',
* 'name2' => 'value2',
* ],
* ],
* ];
* ```
*
* @param $e the jQuery representation of the element * @param $e the jQuery representation of the element
*/ */
handleAction: function ($e) { handleAction: function ($e) {
...@@ -158,11 +178,6 @@ yii = (function ($) { ...@@ -158,11 +178,6 @@ yii = (function ($) {
if (csrfParam) { if (csrfParam) {
$form.append('<input name="' + csrfParam + '" value="' + pub.getCsrfToken() + '" type="hidden">'); $form.append('<input name="' + csrfParam + '" value="' + pub.getCsrfToken() + '" type="hidden">');
} }
if (params && $.isPlainObject(params)) {
$.each(params, function (idx, obj) {
$form.append('<input name="' + idx + '" value="' + obj + '" type="hidden">');
});
}
} }
$form.hide().appendTo('body'); $form.hide().appendTo('body');
} }
...@@ -173,6 +188,13 @@ yii = (function ($) { ...@@ -173,6 +188,13 @@ yii = (function ($) {
activeFormData.submitObject = $e; activeFormData.submitObject = $e;
} }
// temporarily add hidden inputs according to data-params
if (params && $.isPlainObject(params)) {
$.each(params, function (idx, obj) {
$form.append('<input name="' + idx + '" value="' + obj + '" type="hidden">');
});
}
var oldMethod = $form.prop('method'); var oldMethod = $form.prop('method');
$form.prop('method', method); $form.prop('method', method);
...@@ -180,6 +202,13 @@ yii = (function ($) { ...@@ -180,6 +202,13 @@ yii = (function ($) {
$form.prop('method', oldMethod); $form.prop('method', oldMethod);
// remove the temporarily added hidden inputs
if (params && $.isPlainObject(params)) {
$.each(params, function (idx, obj) {
$('input[name="' + idx + '"]', $form).remove();
});
}
if (newForm) { if (newForm) {
$form.remove(); $form.remove();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment