Yii Framework Forum: Login senza aggiornare pagina - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Login senza aggiornare pagina Rate Topic: -----

#1 User is offline   Collateral 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 21-August 16

Posted 12 September 2016 - 12:41 PM

Salve a tutti, da un paio di giorni cerco una soluzione per creare dei form in grado di eseguire le loro belle operazioni senza aggiornare completamente la pagina. I form in questione li ho inclusi direttamente nel layout dell'applicazione, proprio nell'intestazione delle pagine, quindi visibili su ogni pagina dell'intera applicazione.

Posted Image


Potreste aiutarmi o indirizzarmi verso la corretta soluzione?
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 2,006
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 13 September 2016 - 06:43 AM

Beh, io invierei il form di autenticazione via ajax e se la risposta e' corretta, aggiornerei i cookie. Da quel momento in poi, avendo i cookie aggiornati, tutte le richieste dovrebbero essere valide.
0

#3 User is offline   Collateral 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 21-August 16

Posted 14 September 2016 - 05:29 AM

Qualcosa non mi quadra....
...ho una action nel controller, e fin quando eseguo il form da una view... tutto fila liscio.

Se il form lo vado a inserire nel layout, invece di averlo in una view, ad ogni submit mi carica la view.
Ma se la view è già aperta... il form nel layout funziona benissimo. Appena abbandono la view, si ripresenta lo stesso problema.

Questa è l'action:

    public function actionTransactions() {

        // Dichiarato anche nel layout dell'applicazione per provare il form incluso nel layout
        $model = new \yii\base\DynamicModel(['username', 'value', 'type']);
        $model->addRule(['username', 'value', 'type'], 'required');

        header('Cache-Control: no-cache, must-revalidate');
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
        header('Content-type: application/json');

        $request = \Yii::$app->getRequest();

        if ($request->isAjax) {

            Yii::$app->response->format = Response::FORMAT_JSON;

            $user_id = $request->post('user_id');
            $type = $request->post('type');
            $amount = $request->post('amount');

            $result = json_encode(['status' => 'error']);

            if ($type) {
                if ( .... ) {
                    ....
                    $result = json_encode(['status' => 'success', 'message' => 'Transaction OK']);
                } else {
                    $result = json_encode(['status' => 'error', 'message' => 'User balance error']);
                }
            } else {
                if ( .... ) {
                    ....
                    $result = json_encode(['status' => 'success', 'message' => 'Transaction OK']);
                } else {
                    $result = json_encode(['status' => 'error', 'message' => 'User balance error']);
                }
            }

            echo $result;
            Yii::$app->end();
        } else {
            return $this->render('transactions', [
                'model' => $model
            ]);
        }

    }


Da premettere che il $model lo vado a dichiarare e inizializzare già nel layout quando tento di utilizzare la form inclusa nel layout.

Aggiungo il block che renderizzzo nel layout:
$this->beginBlock('transfer');
if (!Yii::$app->user->isGuest) {
    Pjax::begin([ /* Pjax options */]);

        $model = new \yii\base\DynamicModel(['username', 'value', 'type']);
        $model->addRule(['username', 'value', 'type'], 'required');

        $list = [
            0 => Yii::t('frontend', 'Deposit'),
            1 => Yii::t('frontend', 'Withdraw')
        ];

        $form = ActiveForm::begin([
            'id' => 'transaction-form',
            'action' => ['site/transactions'],
            'type' => ActiveForm::TYPE_HORIZONTAL,
            'enableClientValidation' => false,
            //'formConfig' => ['labelSpan' => 3, 'deviceSize' => ActiveForm::SIZE_SMALL]
        ]);

        echo $form->field($model, 'username')->dropDownList(
            ArrayHelper::map(User::find()->where(['refer' => \Yii::$app->user->getIdentity()->id])->all(), 'id', 'username'),
            ['id' => 'user_id', 'name' => 'user_id']
        );
        echo $form->field($model, 'value')->textInput(['placeholder' => Yii::t('frontend', 'Insert an amount to transfer...'), 'id' => 'amount', 'name' => 'amount']);
        echo $form->field($model, 'type')->radioList($list, ['inline' => true, 'id' => 'type', 'name' => 'type'])->label(false);
        echo Html::submitButton(Yii::t('frontend', 'Transfer'), ['class' => 'btn btn-primary']);
        ActiveForm::end();
    }

    Pjax::end();
$this->endBlock();

0

#4 User is offline   Collateral 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 21-August 16

Posted 14 September 2016 - 05:48 AM

[RISOLTO]
Per qualche scherzo infame del mio umile intelletto... avevo dimenticato di inserire direttamente nel layout il codice java legato al form. Ecco cos'era che non quadrava :lol:

$this->registerJs('      
    $("#transaction-form").on("beforeSubmit", function(e) {
    
        var form = $(this);
        
        if (form.find(".has-error").length) {
              return false;
        }
        
        var formData = form.serialize();
        
        $.ajax({
            url: form.attr("action"),
            type: form.attr("method"),
            data: formData,
            success: function (data) {
            
                if(data.status == "success"){
                    alert(data.message);
                }else if(data.status == "error"){
                    alert(data.message);
                }
            },
            error: function () {
                console.log("internal server error");
            }
        });
    }).on("submit", function(e){
        e.preventDefault();
    });
    ',
\yii\web\View::POS_READY, 'my-ajax-transactions-submit');

0

#5 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 2,006
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 14 September 2016 - 09:25 AM

occhio che e' javascript, non java ^_^
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users