Ako injektnut property aby som nemusel pisat spagetti code?
- steelbull
- Člen | 241
Tuto diskusiu som nechtiac zalozil na GB fore:
Ako inejktnut priamo property params, aby som v presenteri nemusel pisat $this->config->params ale len $this->config?
Dakujem.
class ConfigService extends \Nette\Object {
private $params;
private $context;
public function __construct($params, \Nette\Database\Context $context) {
$this->context = $context;
$config = (new \App\Model\ConfigurationModel($this->context))->getConfiguration();
$this->params = array_merge($params, $config);
}
public function __invoke() {
return $this->params;
}
}
David Kudera mi poradil toto:
services:
-
class: App\Presenters\NejakyPresenter
setup:
- $param(value)
Ja potrebujem ale nie predat hodnotu do konstruktora, ale potrebujem ziskat hodnotu $this->params, aby som v presenteri skratil zapis z $this->config->params na $this->config. Riesil som to cez invoke() ale to sa mi nepaci.
Dakujem.
Editoval steelbull (8. 4. 2015 12:29)
- David Kudera
- Člen | 455
Před 3 dny ještě další taková otázka
Edit: myslím si, že přístup přímo k parametrům je to stejné, jako přístup ke službám přes context. Toho se taky všichni zbavují (viz někde přednáška s klavírem a doutníkem). Přijde mi to, jako to stejné, protože na první pohled nevidím, co třída skutečně potřebuje
Editoval David Kudera (10. 4. 2015 11:15)
- Jan Suchánek
- Člen | 404
@steelbull: Předávej jen to co potřebuješ ne celý klavír :)
// Co je configSerivs??
class ConfigService extends \Nette\Object {
private $params;
private $context; // fujky
public function __construct($params, \App\Model\ConfigurationModel $configModel) {
$this->params = array_merge($params, $configModel);
}
}
Vůbec nechápu co ta daná služba má dělat to je další kontejner? A k čemu je ten základní a neon? :)
Editoval jenicek (10. 4. 2015 11:47)
- steelbull
- Člen | 241
@jenicek: Tovarnicka, ktoru som vytvoril nacitava konfiguraciu z databazy a prepisuje ju lokalnou konfigucatiou v neone – dovod: k databaze maju pristup pre edit viaceri.
…a nepaci sa mi, ze musim stale pouzivat $this->configuration->params, ale chcem ku konfiguracii pristupovat takto: $this->configuration; Preto by som potreboval nejako vratit ten params. Ja som to riesil cez invoke() kym mi poradis…
Dakujem :-)
Editoval steelbull (11. 4. 2015 17:59)
- Jan Suchánek
- Člen | 404
A nelze neon od konfigurace pomocí db oddělit? Proč musej být spolu?
Editoval jenicek (13. 4. 2015 16:26)
- David Matějka
- Moderator | 6445
nevim, jestli chapu, ale z neonu muzes predat nejen sluzbu, ale muzes na ni i zavolat metodu:
-
setup:
- $config(@\ConfigService::params)
Ale obecne nedoporucuji predavat cele pole parametru, je to stejne predavani
klaviru jako v pripade sluzeb, predavej si konkretni hodnoty. V tvem pripade
je tam lehka komplikace, ze ty hodnoty jsou dynamicky a nemuzes tedy pouzit
%fooValue%
. Ale mela by stacit mala uprava ty config service a
o par znaku vic v neonu:
class ConfigService
{
...
public function __get($name)
{
return $this->params[$name];
}
}
services:
config: ConfigService
-
class: App\Presenters\NejakyPresenter
setup:
- $param(@config::fooValue)