Yii2:使用Anchor发送params作为POST请求

时间:2018-03-02 12:48:37

标签: post parameters yii2

我尝试从控制器中获取POST变量:

<?= GridView::widget([
                'dataProvider' => $dataProvider_products,
                'columns' => [
                    ['class' => 'yii\grid\SerialColumn'],
                    [
                        'label'=>'Name',
                        'format' => 'raw',
                        'value'=>function ($data) use ($model, $dataProvider_products) {
                            return Html::a($data['name'],['suppliers_orders/addproduct', 'order' => $model->id, 'product' => $data['id'],
                                'data-method'=> 'post',
                                'data-params' => ['dataProvider' => $dataProvider_products],
                                ]);
                        },
                    ],
                    'supplier_product_number',
                    'size',
                    'price_net',
                ],
            ]); ?>

参数dataProvider将始终与URL一起发送,并生成GET变量。有哪些必须做的错误,dataProvider将作为POST变量发送?

我的控制器的一部分是:

public function actionAddproduct($order, $product){

// look for GET variable
$request = Yii::$app->request->get('data');
$dataProvider = $request['params']['dataProvider'];

// look for POST variable
$param1 = Yii::$app->request->post('dataProvider', null);

$dataProvider_suppliers_orders_products = $dataProvider;

return $this->actionView($order);

}

1 个答案:

答案 0 :(得分:1)

首先,您要传递select r.EmpName,r.EmpID, count(CASE WHEN d.PrdcType='A' Then 1 else 0 END) as Table1_A_Prdc_Count, COUNT(CASE WHEN r.ExPrdc='A' Then 1 else 0 END) as CAL from Tbl1 r INNER join Tbl2 d on r.EmpID= d.EmpID where r.EmpID in('X1','X2','X3') and d.EmpID in ('X1','X2','X3') group by r.EmpName,r.EmpID,d.EmpID,d.EmpName 参数中的data-params而不是url参数中的设置,所以是的,无论您拉扯了什么,它都将始终作为查询字符串发送脱毛变成秃头¯\ _ _(ツ)_ /¯

然后根据DOCS

  

如果属性是中列出的数据属性    options ,例如yii\helpers\Html::$dataAttributesdata,列表   将呈现属性,一个用于值数组中的每个元素。   例如,生成ng   生成'data' => ['id' => 1, 'name' => 'yii']data-id="1" data-name="yii"   'data' => ['params' => ['id' => 1, 'name' => 'yii'], 'status' => 'ok']

因此,您需要将锚点更改为

data-params='{"id":1,"name":"yii"}' data-status="ok"

但是由于你将Html::a($data['name'], ['suppliers_orders/addproduct', 'order' => $model->id, 'product' => $data['id']], [ 'data' => [ 'method' => 'POST', 'params' => ['dataProvider' => $dataProvider_products] ] ]); 对象传递给params它不会起作用,因为它会更改为$dataProvider但是如果它是简单的文本那么它将起作用,否则你必须改变你的方法。

[Object Object]的完整代码如下所示

GridView