action culomn in kartriks tabularform : deleting lines does not work

Hello

yii2.0.5

I have the following problem in my web application :

There are 2 entities - invoiceheader and invoiceline

In a special view I show an invoice header and : the corresponding lines with kartik\builder\TabularForm

Problem is that the delete action of one line does not work

I first tried to use the kartrik standard way :


'actionColumn'=>['class' => '\kartik\grid\ActionColumn', ],

But as this did not work I used custom action liek this :


'actionColumn'=>['class' => '\kartik\grid\ActionColumn', 

	'template' => '{delete}',

	'buttons' => [

		'delete' => function ($url, $model) {

			return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, ['data-method' => 'post', 'data-confirm' => Yii::t('app', 'model.invoiceline.confirmdelete')]);

		}

	],

	'urlCreator' => function ($action, $model, $key, $index) {

		if ($action === 'delete') {

			$url = Url::toRoute(['invoiceline/delete', 'id' => $model->id]);

			return $url;

		}

	}

],

But this too does not work.

What suprises me is that when I inspecte the button on the invoice line, the route is as attended :

<a href="/yii2ti01/ti0102/backend/web/index.php?r=invoiceline%2Fdelete&amp;id=4" data-method="post" data-confirm=…

But when I click on the button does not go to the invoiceline delete action !

Here is some code to give you more information :

InvoiceheaderController.php - Invoicetabular action :


    public function actionInvoicetabular($id)

    {

		$defaultcurrencyname = \common\models\Company::getDefaultcurrency($id);

		$headermodel = $this->findModel($id);

		

		$currencyname = \common\models\Currency::getCurrency($headermodel->currency_id);


		$sourceLineModel = new \common\models\InvoicelineSearch;

		$lineQuery = \common\models\Invoiceline::find()->indexBy('id'); 

		$lineQuery->andWhere('invoiceheader_id = :id', [':id' => $id]);

		$lineDataProvider = new \yii\data\ActiveDataProvider([

			'query' => $lineQuery,

			'pagination' => [ 'pagesize' => 5 ]

		]);


        if ($headermodel->load(Yii::$app->request->post())) {

			//$lineDataProvider = $sourceLineModel->search(Yii::$app->request->getQueryParams());

			$models = $lineDataProvider->getModels();

			if (\common\models\Invoiceline::loadMultiple($models, Yii::$app->request->post()) && \common\models\Invoiceline::validateMultiple($models)) {

				foreach ($models as $index => $model) {

					if ($model->quantity == '') { $model->quantity = 0; }

					if ($model->unitpriceht == '') { $model->unitpriceht = 0; }

					if ($model->discountamount == '') { $model->discountamount = 0; }

					if ($model->discountpercentage == '') { $model->discountpercentage = 0; }

					if ($model->isAttributeChanged('discountamount')) {

						$model->amountht = ($model->unitpriceht *  $model->quantity) - $model->discountamount;

						if ($model->quantity * $model->unitpriceht == 0) {

							$model->discountpercentage = 0;

						} else {

							$model->discountpercentage = 100 * ( 1 - ( $model->amountht / ($model->quantity * $model->unitpriceht)));

						}

					} else {

						$model->amountht = $model->quantity * $model->unitpriceht * (1 - ($model->discountpercentage / 100));

						$model->discountamount = ($model->unitpriceht *  $model->quantity) - $model->amountht;

					}

					if (!$model->save()) {

						Yii::$app->session->setFlash('error', "Invoice Line Error.");

						return $this->render('invoicetabular', [

							'headermodel'=>$headermodel,

							'model'=>$sourceLineModel,

							'DataProvider'=>$lineDataProvider

						]);

					}

				}

                if (!$headermodel->save()) {

					Yii::$app->session->setFlash('error', "Invoice Header Error.");

				    return $this->render('invoicetabular', [

				    	'headermodel'=>$headermodel,

			    		'model'=>$sourceLineModel,

		    			'DataProvider'=>$lineDataProvider

	    			]);

                }

				$headermodel->updateFields($id); // update header

				Yii::$app->session->setFlash('success', Yii::t('app', 'success.update'));

				return $this->redirect(['invoicetabular', 'id' => $headermodel->id]);

			} else {

				return $this->render('invoicetabular', [

					'headermodel'=>$headermodel,

					'model'=>$sourceLineModel,

					'DataProvider'=>$lineDataProvider,

					'defaultcurrencyname'=>$defaultcurrencyname,

					'currencyname'=>$currencyname,

					'fpnl'=>[$headermodel->getPreviousId($id), $headermodel->getNextId($id)]

				]);

			}

        } else {

			return $this->render('invoicetabular', [

				'headermodel'=>$headermodel,

				'model'=>$sourceLineModel,

				'DataProvider'=>$lineDataProvider,

				'defaultcurrencyname'=>$defaultcurrencyname,

				'currencyname'=>$currencyname,

				'fpnl'=>[$headermodel->getFirstId($id), $headermodel->getPreviousId($id), $headermodel->getNextId($id), $headermodel->getLastId($id)]

			]);

		}

    }

the view invoicetabular.php :


    ...

    <?php echo TabularForm::widget([

        'dataProvider'=>$DataProvider,

        'form'=>$form,

        'attributes'=>$model->formAttribs,

        'checkboxColumn'=>false,

        'actionColumn'=>['class' => '\kartik\grid\ActionColumn', 

		

				'template' => '{delete}',

				'buttons' => [

					'delete' => function ($url, $model) {

						return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, ['data-method' => 'post', 'data-confirm' => Yii::t('app', 'model.invoiceline.confirmdelete')]);

					}

				],

				'urlCreator' => function ($action, $model, $key, $index) {

					if ($action === 'delete') {

						//$url = Url::toRoute(['invoiceline/delete', 'id' => $model->id]);

						$url = Url::to(['invoiceline/delete', 'id' => $model->id]);

						return $url;

					}

				}

			],

        'gridSettings'=>[

            'floatHeader'=>true,

            'panel'=>[

                //'heading' => '<h3 class="panel-title"><i class="glyphicon glyphicon-book"></i> Manage Books</h3>',

                'type' => GridView::TYPE_PRIMARY,

                'before'=>false,

                'footer'=>false,

            ]

        ]

    ]); ?>

    ...

I would be grateful for any help !