Získání dat z formu nenačte všechny inputy

Tomas Trdla
Člen | 19
+
0
-

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
+
0
-

odkud a jak volas createPlotForm? pravdepodobne pri zpracovani tam nepredavas spravny scaleCount

Tomas Trdla
Člen | 19
+
0
-

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
+
+2
-

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

Tomas Trdla
Člen | 19
+
0
-

Máš pravdu, se změnou renderPlot na actionPlot už to funguje.

Děkuju