Získání dat z formu nenačte všechny inputy
- Tomas Trdla
- Člen | 19
Mám formulář, ve kterém je proměnný počet polí pro jeden parametr (jedná se o tisk objektů do pdf, jejichž šířka se liší papír od papíru a z jednoho formu se tisknou vždy pouze objekty se stejnou šířkou a na jednu A4).
ve FormFactory mám následující:
namespace App\Components\Forms;
use Nette;
use Nette\Application\UI\Form;
class ScaleFormFactory extends Nette\Application\UI\Control {
...
public function createPlotForm($tempPlotData = NULL, $scaleCount = 1) {
$form = new Form(NULL, 'ScaleForm');
$form->addProtection();
// přidat prvky uživatelského inputu
$scale_user_defined = $form->addContainer('scale_user_defined');
$this->addFormCommon($scale_user_defined, $scaleCount);
// přidat submit tlačítka
$form->addSubmit('create_pdf', 'Vytvořit stupnici');
...
return $form;
}
private function addFormCommon(&$form, $amount = 1) {
$form->addText('date', 'Datum:');
$form->addText('number', 'Číslo 1. stupnice:');
for ($i = 0; $i < $amount; $i++)
$form->addText("scale_length_" . "$i", 'Délka stupnice:');
}
v šabloně pak(preferuji low-level):
{for $i=0; $i<$MAX_SCALES_COUNT; $i++}
<div class="form-group row">
<label n:name="scale_user_defined-scale_length_{$i}" class="col-sm-2 col-form-label">Délka {$i +1}. stupnice:</label>
<div class="col-sm-10">
<input n:name="scale_user_defined-scale_length_{$i}" type="number"
class="form-control" placeholder="Délka stupnice [mm]"
min="0" step="0.001" {if $i==0}required{/if}>
</div>
</div>
{/for}
a zpracování:
public function scaleFormSucceded_userPlot(Form $form) {
// vytahnout submitnuta data z formulare do array
$values = $form->getValues(TRUE)['scale_user_defined'];
...
}
problém je, že getValues
mi načte pouze ostatní inputy, ale
tyhle ne, i přesto, že v httpData jsou přítomné viz( httpData a $values a dump containeru v šabloně
je taky vidí)
Editoval Tomas Trdla (30. 7. 2019 11:57)
- David Matějka
- Moderator | 6445
odkud a jak volas createPlotForm? pravdepodobne pri zpracovani tam nepredavas spravny scaleCount
- Tomas Trdla
- Člen | 19
David Matějka napsal(a):
odkud a jak volas createPlotForm? pravdepodobne pri zpracovani tam nepredavas spravny scaleCount
V presenteru:
private $MAX_SCALES_COUNT;
public function renderPlot($idScale, $tempPlotName = NULL) {
...
// předat maximální počet stupnic
$this->MAX_SCALES_COUNT = ComputingFunctions::getMaxScalesCountForOneA4($data);
$this->template->MAX_SCALES_COUNT = $this->MAX_SCALES_COUNT;
}
public function createComponentScaleForm() {
...
// vytvořit formulář s daty z db
$form = $this->scaleFF->createPlotForm($tempPlotData, $this->MAX_SCALES_COUNT);
$form->onSuccess[] = [$this, 'scaleFormSucceded_userPlot'];
return $form;
}
Nicméně formulář je vykreslený vždy se správným počtem inputů
Editoval Tomas Trdla (30. 7. 2019 12:15)
- David Matějka
- Moderator | 6445
zpracovani formulare se provadi pred volanim render metody, viz https://doc.nette.org/…n/presenters#… .. takze v okamziku zpracovani tam nemas hodnotu MAX_SCALES_COUNT nactenou.
kdyz pouzijes actionPlot namisto renderPlot, tak to bude fungovat. idealne v action budes mit nacteni tech dat a pak renderPlot, kde budes posilat data do sablony