Ziskani parametru v url z komponenty
- MW
- Člen | 626
Zdravim, trochu jsem se zasekl, prosim o radu:
Mam komponentu v tomto pripade je to kalendar. V sablone komponenty posilam parametr do url:
<a n:href="this, 'id' => $row['id']">{$row->name}</a>
do url se me to dostane jako calendar-id, ale na stejne strance mam i formular, kam potrebuju dostat
$form->addHidden('id', $this->getParametr('calendar-id'));
Ovsem ja se na tento parametr ve formulari nedostanu.
Jak prosim tedy spravne predam parametr z komponenty do presenteru?
Dekuji
Editoval MW (18. 1. 2013 11:23)
- MW
- Člen | 626
Dekuji za odpoved.
Asi budu muset. Ted jsem narazil na podobny problem, kdy jsem opet do sablony pridal link na smazani udalosti, ovsem metodu na smazani mam zas v presenteru. Nesel by pouzit jen {plink} ???
Uvazoval jsem tak, ze pokud pouziju komponentu (cizi komponentu), kterou budu treba v budoucnosti aktualizovat, nechci do ni moc zasahovat a vse potrebne co potrebuji navic si udelam bokem, tedy v preseneru.
Komponenta ma totiz vlastni model, ktery implementuje sve rozhrani. A tak me prislo slozite, to cele prepisovat, jak Interface tak v model.
Je to tedy tak, ze by se parametry nemely touto cestou predavat?
Mimochodem jsem myslel, ze pokud je parametr v URL, tak metoda getParameter() jej vidi..
Dekuji !
Editoval MW (18. 1. 2013 12:03)
- MW
- Člen | 626
Mimochodem zkousim ten {plink z komponenty}
pokud si tam dam odkaz :
<a href="{plink Calendars:deleteEvent, id => $row['id']}">[SMAZAT]</a><br />
a v presenteru mam deleteEvent() (ten se v poradku vykona)
tak me to hazi chybu:
Page not found. Missing template ..... deleteEvent.latte
Lze to vubec nejak takto resit?
Diky
Editoval MW (18. 1. 2013 12:16)
- Michal Vyšinský
- Člen | 608
Mimochodem jsem myslel, ze pokud je parametr v URL, tak metoda getParameter() jej vidi..
No měl by to presenter vidět. Schválně zkus dumpnout volání této metody bez parametru (vrací pole všech $_GET)
A co se týče toho posledního příspěvku:
Toto by měl být signál! Takže v plink volej Calendars:deleteEvent! jako
signál a metodu přejmenuj jako „handleDeleteEvent“. Po zpracování
signálu přesměruj a je po problému.
- MW
- Člen | 626
Diky!
Toto funguje:
function handledeleteEvent($id) {
$this->context->database->table('calendar')->where('id', $id)->delete();
$this->flashMessage('Smazáno');
$this->redirect('Calendars:');
}
<a href="{plink deleteEvent!, id => $row['id']}">[SMAZAT]</a><br />
Co se tyce parametru, tak dump me vyhodi pouze ty, se kterymi pracuju
v aktualnim presenteru.
To co se do url dostalo v komponente (byt je volana ve stejnem presenteru), to
tam neni. Ale v URL ji vidim :-(
- Michal Vyšinský
- Člen | 608
HttpRequest
Tak už to získat snad jen přes:
$presenter->context->httpRequest->getQuery("NAZEV PARAMETRU"); // $presenter = $this v presenteru :)
Edit:
A nebo když to zavoláš bez parametru tak vrací opět pole všech parametrů
v url.
Editoval CherryBoss (18. 1. 2013 14:18)
- hAssassin
- Člen | 293
Presne jak pise ViPErCZ, cely mi to prijde nejaky divny… Ted si vytvoril komponentu aby jsi ji mohl pouzivat na vic mistech a hned potom si ji na pevno svazal s presenterem, protoze ted kdekoliv pouzijes tu komponentu budes muset implementovat i signal v presenteru. Fakt postaveny na hlavu…
Neslo by bud jak pise ViPErCZ cely to zpracovat v komponente nebo kdyz uz vytvorit callback ktery by byl implementovany v presenteru ale volal by se ze signalu komponenty?
- MW
- Člen | 626
Uz me svita. Panove moc diky… asi me chybela veta „Ted si vytvoril komponentu aby jsi ji mohl pouzivat na vic mistech“ ;)
Pristupoval jsem k tomu tak, ze toto nebudu pouzivat v aplikaci nikde jinde…
Muzu, ale poprosit o vysvetleni nebo odkaz, proc to ten parametr nevidi.. ted me to uz zajima ciste z duvodu pochopeni … predelam to do komponenty…
Moc diky !!!
- ViPEr*CZ*
- Člen | 817
MW napsal(a):
Diky moc za odpovedi…
Ac je to urcite proti vsemu, tak toto funguje…
Spravne to neni, ale zkusil jsem to ciste pro zajimavost…$form->addHidden('id', $this->context->httpRequest->getQuery('calendar-id'));
Diky vsem !
No jasně… nebo také $_GET[‚calendar-id‘]; Když to je v URL, tak to
by v tom byl čert, aby to nešlo nějak vycucnout :-)
Mnohem hezčí bude persistentní parametr v jedné komponentně co se třeba
setterem nastaví do druhé subkomponenty oné komponenty při vytváření oné
subkomponenty. ;-)
- ViPEr*CZ*
- Člen | 817
castamir napsal(a):
Mnohem hezčí bude persistentní parametr v jedné komponentně co se třeba setterem nastaví do druhé subkomponenty oné komponenty při vytváření oné subkomponenty. ;-)
Nemluvíš jazykem mého kmene :D
Tak pomůžu.
Super přednáška o komponentách: https://www.youtube.com/watch?…
Persistentní parametry: https://doc.nette.org/…n/presenters#…
- ViPEr*CZ*
- Člen | 817
castamir napsal(a):
**@ViPEr\*CZ\*** to video vypadá zajímavě, možná se i něčemu přiučím ;) Dík
Jj to je… naučíš se tam obsluhovat komponenty jako kontejnery. Například pokud chce člověk kalendář, který bude mít svůj formulářem na obsluhu událostí, tak bez toho to nejde zapouzdřit jako jednu komponentu. Takhle si jen udělá člověk komponentu kalendáře a do něj přidá komponentu formuláře. V projektech pak ale vytvořím jen továrnu na kalendář a vykreslím {control calendar} a už má k dispozici rovnou kalendář a jeho formulář. :-)