Yii2: основы работы с PJAX

PJAX это виджет в Yii2 позволяющий обновлять вам только заданный участок страницы, без перезагрузки всего содержимого. Например вы можете сделать пагинацию в вашем блоге на PJAX.

Вы можете обернуть весь контейнер со списком материалов и при открытии страниц, они будут подгружатся в этот же контейнер практически молниеносно, без перезагрузки всей страницы. Вы даже можете обернуть весь layot сайта в PJAX и тогда по переходу по ссылкам страницы будут открываться практически молниеносно.

Для того, что бы в Yii Framework выполнить какую либо часть кода, вам необходимо подключить класс:

use yii\widgets\Pjax;

и обернуть необходимый код в соответствующий виджет:

<?php Pjax::begin(); ?>
 // ваш код
<?php Pjax::end(); ?>
Эта заметка нужнается в более расширенной теоретической базе. Сегодня же я поделюсь моим базовым примером, как через PJAX выполнить экшен контроллера.

Вызов экшена в контроллере через PJAX

В форме:

<div class="col-sm-12 col-md-6">
    <?php Pjax::begin(); ?>
    <?= Html::a("Новая случайная строка", ['site/multiple'], ['class' => 'btn btn-lg btn-primary']) ?>
    <h3><?= $randomString ?></h3>
    <?php Pjax::end(); ?>
</div>
<div class="col-sm-12 col-md-6">
    <?php Pjax::begin(); ?>
    <?= Html::a("Новый случайный ключ", ['site/multiple'], ['class' => 'btn btn-lg btn-primary']) ?>
    <h3><?= $randomKey ?><h3>
    <?php Pjax::end(); ?>
</div>

В контроллере:

public function actionMultiple()
{
    $security = new Security();
    $randomString = $security->generateRandomString();
    $randomKey = $security->generateRandomKey();
    return $this->render('multiple', [
        'randomString' => $randomString,
        'randomKey' => $randomKey,
    ]);
}

Вариант когда по клику можно обновить Pjax

<?php
    $this->registerJs(
        '$("document").ready(function(){
            $(".myButtom").click(function() {
              $.pjax.reload({container:"#payments"});  //Reload GridView
        });
    });'
    );
?>
<?php yii\widgets\Pjax::begin(['id' => 'new_payment']) ?>
// Some code
<?php yii\widgets\Pjax::end(); ?>