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();