nette a snipety které vrací chybovou stránku
- Webster.K
- Člen | 212
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?
- Mysteria
- Člen | 797
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 | 212
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 :/