Sto sviluppando un sistema per registrazione fatture/emissione di fatture in PDF.
Ho un form dove inserisco i dati della fattura e vorrei fare in modo che aggiungendo un tasto ANTEPRIMA, sia possibile recuperare i dati del form per generare un anteprima del documento in PDF (eseguendo una action diversa con gli stessi dati presenti nelle celle).
Ho inserito una textbox nel form ed ho cercato di stampare a video il contenuto con
echo $_POST[“miatextbox”] nell’action, ma nulla, mi da errore già quando carico la pagina “Undefined index”
l’array $_POST è proprio vuoto non capisco dove sbaglio, forse la logica di yii2 di come invia il contenuto del form al controller? non può essere letto da $_POST[“nomecampo”] ?
public function actionCreadocumento()
{
$model = new FactotumDocumenti();
$modelsDocumentiDati = [new FactotumDocumentiDati];
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$modelsDocumentiDati = Model::createMultiple(FactotumDocumentiDati::classname());
Model::loadMultiple($modelsDocumentiDati, Yii::$app->request->post());
$valid = $model->validate();
$valid = Model::validateMultiple($modelsDocumentiDati) && $valid;
if ($valid) {
$transaction = \Yii::$app->db->beginTransaction();
try {
if ($flag = $model->save(false)) {
foreach ($modelsDocumentiDati as $modelsDocumentiDati) {
$modelsDocumentiDati->IDDocumento = $model->IDDocumento;
if (! ($flag = $modelsDocumentiDati->save(false))) {
$transaction->rollBack();
break;
}
}
}
if ($flag) {
$transaction->commit();
return $this->redirect(['view', 'id' => $model->IDDocumento]);
}
} catch (Exception $e) {
$transaction->rollBack();
}
}
}
else {
echo $_POST["campotest"]; // qui dovrebbe leggere i dati dall'input "campotest" nel form stamparli e poi arrestarsi
die();
return $this->render('creadocumento', [
'model' => $model,
'modelsDocumentiDati' => (empty($modelsDocumentiDati)) ? [new FactotumDocumentiDati] : $modelsDocumentiDati
]);
}
}
Ecco lo stralcio di codice, anche se ho fatto diverse prove non saprei se l’errore può essere qui o sto sbagliando logica. Grazie anticipate per il tuo aiuto!
No non è un render partial (perdonami il metodo un po ‘grezzo’ volevo solo vedere se riuscivo ad intercettare un qualsiasi valore, fondamentalmente mi basta stampare a video i valori delle celle del form in qualche modo per generare l’anteprima).
e gli esempi indicati non mi funzionano in questa installazione, mentre funzionano su una installazione diversa (base) di Yii2. Di norma il valore $_POST viene passato e letto nell’action.
quindi sono un po sconcertato e sto indagando su tutto anche il template che ho inserito qui (metronic 3.9) magari influisce su qualche aspetto, sperando di non essere troppo fuori strada.
Per la cronaca le altre variabili di sistema $_GET, gli headers e altro vengono letti. Sembra mancare solo $_POST che e sempre vuota.
Il controllo come tu dicevi era già stato fatto sul client (quindi confermo che era il browser che non inviava nulla).
Il motivo era dovuto ad un errore nello script di validazione del form (abbastanza articolato) che inviava i dati dalla pagina (per questo quando inviavo da form diversi funzionava)!.
Per tornare all’argomento principale confermo che la chiamata $_POST[“nomecampo”] può essere letta tranquillamente nell’action o meglio ancora si può usare Yii::$app->request->post() quindi in caso di doppio submit il codice