nette a snipety které vrací chybovou stránku

Webster.K
Člen | 192
+
0
-

Zdravím všechny, řeším problém se snipetama… ve verzi nette 2.3 mi kód funguje v pohodě, na verzi 2.4 už stejný kód nefunguje… Snažím se vytvořit filtr na vybrání značky auta a z toho vyfiltrování na model… mám formulář (v App\forms) kde vytvářím formulář který má inputy:

$form->addSelect('id_znacka_auta', 'Značka:', $seznamZnacek)
                ->setRequired('Vyber značku')
                ->setPrompt('Vyber značku auta')
                ->setAttribute('class', 'form-control');
        $form->addSelect('id_model_auta', 'Model:', $seznamModelu)
                ->setPrompt('Vyber model')
                ->setRequired('Vyber model')
                ->setAttribute('class', 'form-control');

Do těch inputů se dostává pole hodnot z DB (id,jmeno – 1, bmw atd..). Pak mám presenter ve kterém mám handle:

public function handleModelyZnacky($value) {
        $secondItems = $this->auta->seznamModeluZnacky($value);
        if ($value) {
            $this['newCarForm']['id_model_auta']
                    ->setPrompt('Vyberte model')
                    ->setRequired('Vyber model')
                    ->setItems($secondItems);
        } else {
            $this['newCarForm']['id_model_auta']
                    ->setPrompt('Vyberte nejdříve značku')
                    ->setRequired('Vyber model')
                    ->setItems([]);
        }

        $this->redrawControl('wrapper');
        $this->redrawControl('modelAutaSnippet');
    }

a následně v šabloně je:

{snippet modelAutaSnippet}
                            <div class="media">
                                {input id_model_auta}
                            </div>
                        {/snippet}

a na jejím uplném konci:

{block scripts}
{include jsCallback, input => id_znacka_auta, link => modelyZnacky}

{define jsCallback}
<script>

    $('#' + {$control["newCarForm"][$input]->htmlId}).on('change', function () {
        $.nette.ajax({
            type: 'GET',
            url: {link {$link}!},
            data: {
                'value': $(this).val(),
            }
        });
    });

</script>
{/define}

Stránka se načte, vyberu značku a v tu chvíli červená obrazovka s chybou: Warning
end() expects parameter 1 to be array, null given

a označí to řádek 130 že je na něm chyba:
120: <?php
121: }
122:
123:
124: function blockModelAutaSnippet($_args)
125: {
126: extract($_args);
127: $this->global->snippetDriver->enter(„modelAutaSnippet“, „static“);
128: ?>
129: <div class=„media“>
130: <?php echo end($this->global->formsStack)[„id_model_auta“]->getControl() /* line 28 */ ?>
131:
132: </div>
133: <?php
134: $this->global->snippetDriver->leave();

Koukal jsem jestli to z DB bere správné hodnoty, všechny selecty, vrácená data jsou v pořádku, URL pres tracy, když otevru i s ?do=modelyZnacky&value=5, stránku to otevře s vyfiltrovanýma hodnotama :/ a hned jak vyberu značku, objeví se ta chyba… Nenapadá někoho, čím by to mohlo být?

Webster.K
Člen | 192
+
-3
-

Tak jsem to „vyřešil“ tak, že projekt prostě pojede na nette 2.3 místo 2.4, protože tam to nefunguje… někde v dokumentaci k formulářům pro 2.4 jsem se dočetl že to může vracet chybu end()… ale řešení? Nikde…

Webster.K
Člen | 192
+
0
-

Na toto jsem narazil, nicméně když použiju snipetarea, tak to vrací stejně chybu end()… jak jsem psal výše, pojedu projekt prozatím na 2.3 a až bude opravdu nutné přejít, začnu to řešít, protože jsem to řešil několik dní a bez výsledku…

Mysteria
Člen | 797
+
0
-

A tohle jsi vyzkoušel? Když jsem přecházel na 2.4 tak tohle bylo nejjednodušší řešení pomocí nalézt a nahradit. :)

Pokud si kvůli snippetům předáváte do šablony $template->_form = $form, můžete to nahradit za $template->getLatte()->addProvider(‚formsStack‘, [$form]), nicméně jde stále jen o obezličku, korektní je použít {snippetArea xyz} a ten invalidovat společně se snippetem.

Webster.K
Člen | 192
+
0
-

Mysteria napsal(a):

A tohle jsi vyzkoušel? Když jsem přecházel na 2.4 tak tohle bylo nejjednodušší řešení pomocí nalézt a nahradit. :)

Pokud si kvůli snippetům předáváte do šablony $template->_form = $form, můžete to nahradit za $template->getLatte()->addProvider(‚formsStack‘, [$form]), nicméně jde stále jen o obezličku, korektní je použít {snippetArea xyz} a ten invalidovat společně se snippetem.

Ano, toto jsem zkoušel a bohužel bez úspěchu :/