Customize delete confirmation in GridView

As nearly everything in Yii 2, you are starting from scratch with out-of-the-box solution for displaying models in grids (using yii\grid\GridView). Usually last among columns ($columns) of such grid there is an button column (yii\grid\ActionColumn) that serves basic operations for corresponding row or item. One of such column’s buttons there’s a delete button.

Everything is ready for you, to be used without much effort, but only as long as you are building an English-only application, as translating or customizing delete confirmation in such scenario isn’t a super-easy task. One of a great approaches is given in here: How to create a custom delete button?.

But, it works just great, if you want to customize just a single delete button of a one or maybe two grid view. What about, if you have a grid view for each and every of your data model?

Then the idea of using custom class comes in help.

You can define a really simple class that extends yii\grid\ActionColumn:

class CustomActionColumn extends ActionColumn
{
    /**
     * @var string message displayed as a confirmation of clicking "Delete" button
     */
    public string $deleteConfirmationText = 'Are you sure?';

    /**
     * {@inheritdoc}
     */
    public function init()
    {
        parent::init();

        $this->initDefaultButtons();
    }

    /**
     * Overrides the default button rendering callbacks.
     */
    protected function initDefaultButtons()
    {
        $this->initDefaultButton('view', 'eye-open');
        $this->initDefaultButton('update', 'pencil');
        $this->initDefaultButton('delete', 'trash', [
            'data-confirm' => $this->deleteConfirmationText,
            'data-method' => 'post',
        ]);
    }
}

And then just declare it as a one of columns in your grid view:

'class' => CustomActionColumn::class,
'deleteConfirmationText' => 'Seriously!',

You can use translations naturally:

'class' => CustomActionColumn::class,
'deleteConfirmationText' => Yii::t('app', 'Are you sure?'),

And this is just the beginning. Because using the very similar way you can customize nearly every aspect of your action column.

Leave a Reply