Jak předat konstruktoru služby parametr z presenteru
- ludek
- Člen | 83
Zdravím. Mám třídu
class TestGrid {
function __construct(Nette\Http\Session $s, Nette\Database\Context $dbContext /*, $test */)
{
// jak sem tohle dostat?:
// dump($test);
}
}
V config.neon
services:
testGrid:
class: TestGrid ()
autowired: FALSE
V presenteru:
/** @return TestGrid */
protected function createComponentTestGrid() {
return $this->context->createService('testGrid');
}
v šabloně:
{control testGrid}
Chtěl bych v metodě renderDefault()
předat parametr
$test
, se kterým by mohla služba uvedená v configu pracovat,
ale nevím jak. Snad chápu správně, že Nette předá službě parametry,
které jsou uvedené v její deklaraci, ale jak mám docílit, aby se tam
dostal další parametr z presenteru? Něco jako
public function renderDefault($id) {
$this['testGrid']->test = $id; //tohle se ale do konstruktoru nedostane
}
Dík.
- Casper
- Člen | 253
„Továrnám lze na rozdíl od služeb předávat parametry“ – viz dokumentace.
Pokud jde tedy o nějaký parametr, který službu konfiguruje, použij
v neonu class: TestGrid(..., ..., %test%)
a nadefinuj i parametr
test. Jinak budeš muset použít nějaký setter. Každopádně je na
zvážení, zda je to skutečně dobrý přístup, pokud potřebuješ
v konstruktoru služby nějaký parametr, který ji nekonfiguruje.
Editoval Casper (10. 3. 2014 14:06)
- ludek
- Člen | 83
Díky. V dokumentaci se píše o „factories:“, což je asi zavrženo. Snad nějak takhle?
config.neon:
services:
testGrid:
parameters: [test]
class: TestGrid(..., ..., %test% )
autowired: FALSE
služba:
class TestGrid {
function __construct(Nette\Http\Session $s, Nette\Database\Context $dbContext, $test /*<----*/) {
dump($test);
}
}
presenter:
class DashboardPresenter {
public $test;
public function actionDefault($id) { /* render ne, to už je asi pozdě */
$this->test = $id;
}
protected function createComponentTestGrid() {
return $this->context->createService('testGrid', array('test'=>$this->test)/*<----*/);
}