Ajax signálu controlu se nepředá parametr
- Etch
- Člen | 403
Control Abc:
<?php
class AbcControl extends Control{
public function render(){
/* ... */
}
public function handleUpdate($id){
debug::dump($id);
}
}
?>
Šablona controlu Abc:
{snippet abc}
{foreach $stack AS $item}
<a href="{link update, array('id' => $item['id'])}" onclick="return !nette.action(this)">{$item['name']}</a><br />
{/foreach}
{/snippet}
Presenter Homepage:
<?php
class HomepagePresenter extends Presenter{
public function actionDefault(){
$abc = new AbcControl();
$this->addComponent($abc, 'abc');
$this->template->abc = $abc;
}
}
?>
V šabloně presenteru se pak klasicky volá
@{? $abc->render()}
. Všechno funguje naprosto normálně až na
předání parametru metodě handleUpdate($id)
. Control vygeneruje
linky správně a AJAXem se po kliknutí na link pošle požadavek třeba
/?abc-id=245784548&do=abc-update
. Jenže pokud v metodě
udělám dump proměnné $id tak by tam mělo být snad „245784548“, ale
z nějakého důvodu je tam neustále NULL. Neví někdo kde by mohl být
zakopán pes? Předem děkuji.
PS: Samozdřejmě, že pokud metodu handleUpdate($id)
nadefinuji
na úrovni presenteru a poté v Controlu sestavuji link jako
{plink update!, array('id' => $item['id'])}
tak proměnná
$id
obsahuje „24578454“. Problém nastává pouze při definici
v controlu samotném.
Editoval Etch (23. 2. 2009 2:12)
- Etch
- Člen | 403
Jod napsal(a):
Nevidím žiadnu chybu, bude asi niekde inde. Skús {link update, $item[‚id‘]} a pozri či nette zistilo názov parametra a volá ti /?abc-id=245784548&do=abc-update, konkrétne abc-id.
to sem též zkoušel, ale je tam stejný efekt.
handleUpdate($id) v controlu
{link update, $item['id']}
generuje : /?abc-id=245784548&do=abc-update
dump : NULL
{link update, array('id' => $item['id'])}
generuje : /?abc-id=245784548&do=abc-update
dump : NULL
handleUpdate($id) v presenteru
{plink update!, $item['id']}
generuje : /?id=245784548&do=update
dump : 245784548
{plink update!, array('id' => $item['id'])}
generuje : /?id=245784548&do=update
dump : 245784548
Ono linky nette generuje správně, pouze proste pokud je metoda
handle{Signal}
v controlu tak není přístupný předávaný
parametr.
- Etch
- Člen | 403
Vyřešeno. Za blbost a zapomnětlivost se platí. :) Problém byl v konstruktoru v tom, že sem zapomněl zavolat parent::__construct()
<?php
class AbcControl extends Control{
public function __construct($a = NULL){
parent::__construct();
/* ... */
}
public function render(){
/* ... */
}
public function handleUpdate($id){
debug::dump($id);
}
}
?>
Pokud se zapomene zavolat v takovémhle případě
parent::__construct()
tak parametry budou NULL