Yii2 full Pjax App

Hi I’m trying to make one Pjax App

in advanced app :

frontend\views\layouts\main




<?php


/* @var $this \yii\web\View */

/* @var $content string */


use yii\helpers\Html;

use yii\bootstrap\Nav;

use yii\bootstrap\NavBar;

use yii\widgets\Breadcrumbs;

use frontend\assets\AppAsset;

use common\widgets\Alert;

use yii\widgets\Pjax;


AppAsset::register($this);

?>

<?php $this->beginPage() ?>

<!DOCTYPE html>

<html lang="<?= Yii::$app->language ?>">

<head>

    <meta charset="<?= Yii::$app->charset ?>">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <?= Html::csrfMetaTags() ?>

    <title><?= Html::encode($this->title) ?></title>

    <?php $this->head() ?>

</head>

<body>

<?php $this->beginBody() ?>

<?php Pjax::begin(['id' => 'body']) ?>

<div class="wrap">

    <?php

    NavBar::begin([

        'brandLabel' => 'My Company',

        'brandUrl' => Yii::$app->homeUrl,

        'options' => [

            'class' => 'navbar-inverse navbar-fixed-top',

        ],

    ]);

    $menuItems = [

        ['label' => 'Home', 'url' => ['/site/index']],

        ['label' => 'About', 'url' => ['/site/about']],

        ['label' => 'Contact', 'url' => ['/site/contact']],

    ];

    if (Yii::$app->user->isGuest) {

        $menuItems[] = ['label' => 'Signup', 'url' => ['/site/signup']];

        $menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];

    } else {

        $menuItems[] = [

            'label' => 'Logout (' . Yii::$app->user->identity->username . ')',

            'url' => ['/site/logout'],

            'linkOptions' => ['data-method' => 'post']

        ];

    }

    echo Nav::widget([

        'options' => ['class' => 'navbar-nav navbar-right'],

        'items' => $menuItems,

    ]);

    NavBar::end();

    ?>


    <div class="container">

        <?= Breadcrumbs::widget([

            'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],

        ]) ?>

        <?= Alert::widget() ?>

        <?= $content ?>

    </div>

</div>


<footer class="footer">

    <div class="container">

        <p class="pull-left">&copy; My Company <?= date('Y') ?></p>


        <p class="pull-right"><?= Yii::powered() ?></p>

    </div>

</footer>

<?php Pjax::end() ?>

<?php $this->endBody() ?>

</body>

</html>

<?php $this->endPage() ?>



after <body> tag add Pjax::begin() and befor </body> tag add Pjax::end();

now i can go to all navbar links without refresh page !

login with Pjax :

frontend\views\site\login




<?php


/* @var $this yii\web\View */

/* @var $form yii\bootstrap\ActiveForm */

/* @var $model \common\models\LoginForm */


use yii\helpers\Html;

use yii\bootstrap\ActiveForm;


$this->title = 'Login';

$this->params['breadcrumbs'][] = $this->title;

?>

<div class="site-login">

    <h1><?= Html::encode($this->title) ?></h1>


    <p>Please fill out the following fields to login:</p>


    <div class="row">

        <div class="col-lg-5">

            <?php $form = ActiveForm::begin(['id' => 'login-form', 'options' => ['data-pjax' => true]]); ?>


                <?= $form->field($model, 'username') ?>


                <?= $form->field($model, 'password')->passwordInput() ?>


                <?= $form->field($model, 'rememberMe')->checkbox() ?>


                <div style="color:#999;margin:1em 0">

                    If you forgot your password you can <?= Html::a('reset it', ['site/request-password-reset']) ?>.

                </div>


                <div class="form-group">

                    <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>

                </div>


            <?php ActiveForm::end(); ?>

        </div>

    </div>

</div>




<?php

$this->registerCssFile(Yii::$app->urlManager->baseUrl . '/css/test.css' , ['depends' => \yii\bootstrap\BootstrapAsset::className()]) ?>



  • One error

[color="#FF0000"]<?php

$this->registerCssFile(Yii::$app->urlManager->baseUrl . ‘/css/test.css’ , [‘depends’ => \yii\bootstrap\BootstrapAsset::className()]) ?>[/color]

if request Pjax not load correct !

in controller :

frontend\controllers\site\login


 public function actionLogin()

    {

        $model = new LoginForm();

        if ($model->load(Yii::$app->request->post()) && $model->login()) {

            return $this->render('index');

        } else {

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

                'model' => $model,

            ]);

        }

    }



Seems to be what’s right

The procedure for using Pjax right?

ty

Is it your intent to create a one page site/application?

If so, should not be better to use Angular or similia?

I want to do exactly the same thing, but I think Pjax internally defined in the framework and does not but Anglarjs default settings there.

it is not ? Can you help me the most standard method I choose?