Vykreslitelná komponenta jako služba nepřijímá parametry signálu
- Oggy
- Člen | 306
nette 2.0.10
Vytvořil jsem komponentu Basket .. nechci se starat o předávání parametrů, vytvářím ji tedy přes config.
konstruktor komponenty:
<?php
class Basket extends Control {
..
public function __construct(Nette\Http\Session $session, ModelLoader $modelLoader,\Oggy\Helpers $helpers) {
parent::__construct();
....
}
}
?>
config:
<?php
services:
basket: Basket
?>
BasePresenter:
<?php
abstract class BasePresenter extends \BasePresenter {
/* @var \Basket */
private $basket;
//inject sluzby
public function injectBasket(\Basket $basket)
{
$this->basket = $basket;
}
//tovarnicka
protected function createComponentBasket() {
return $this->basket;
}
?>
bohužel signál komponenty nepřijímá parametry:
<?php
public function handleMetoda($moje_id) {
\Nette\Diagnostics\Debugger::barDump($moje_id);
}
?>
$moje_id je NULL
Problém bývá, že komponenta není připojena k rodiči. Přímo v komponentě používám $this->presenter->user, pokud si celou komponentu dumpnu, v handle metodě, vidím, že připojena je.
Otázky kolem DI, inject, atd .. je plné fórum, hledal jsem, ale na podobný problém jsem nenarazil. Většinou je problém v nevolání konstruktoru předka.
Možná jsem celý princip pojmul špatně.
- Oggy
- Člen | 306
PavelJurasek napsal(a):
Pošli i odkaz, kterým ten signál posíláš
Tak odkaz dělám přes nette.ajax ..ale je klasický link
v template kompenenty
<script type="text/javascript">
function chooseShipMethod(shipmethod_id) {
$.nette.ajax({
url: {link chooseShipMethod!},
data: {"shipmethod_id": shipmethod_id},
type: 'get'
});
}
</script>
url linku
…?do=basket-chooseShipMethod&shipmethod_id=1
Editoval Oggy (4. 4. 2013 12:26)
- David Matějka
- Moderator | 6445
ten parametr ma totiz byt basket-shipmethod_id=1, aby tam nemusel davat nazev komponenty na tvrdo, muzes pouzit getUniqueId
- Vojtěch Dobeš
- Gold Partner | 1316
Přesně tak, komponenta je napsaná správně. Pro hlubší pochopení –
klíčové je tam to volání parent::__construct()
, ale to je
důležité kvůli tomu, že se v tom předkovi volá
$this->monitor('Nette\Application\UI\Presenter')
. Právě tohle
volání je zddpovědné za načtení parametrů do komponenty. Jak říkám, ty
to máš správně, jde jen o ten název parametru v odkazu :).