Environment is @deprecated
- loov
- Člen | 49
Zdarec,
chtěl bych se zeptat do jaké míry je Environment deprecated. Využívám
Environment v bootstrapu na loadování configu (používám config.neon).
Dále ho používám na kvúli přepsání fce
formatLayoutTemplateFiles
a formatTemplateFiles
konkrétně ji využívám takto
<?php
$appDir = NEnvironment::getVariable('appDir');
?>
Dále skrze třídu Environment načítám a ukládám nette session
<?php
$this->sessionSap = NEnvironment::getSession('sap');
?>
Zatím mě laděnka nenapsala žádný Error, ale jak tak čtu, tak dříve či později k tomu dojde. Je už v této chvíli nějaká možnost jak aspoň v mém případě Enviroment nahradit? Případně jaká?
- studna
- Člen | 181
Přečti si něco o DI v Nette:
https://forum.nette.org/…cy-injection
Editoval studna (5. 6. 2011 20:02)
- loov
- Člen | 49
studna napsal(a):
Přečti si něco o DI v Nette:
https://forum.nette.org/…cy-injection
Díky určitě pročtu
- srigi
- Nette Blogger | 558
Aby si nemal tolko citania – zapamataj si, ze v Presentari je dostupny DI
kontainer ($this->context
). Skus si ho dumpnut a uvidis co
v nom vsetko je:
$this->context->params; // konfig direktivy
$this->context->session; // sessna
atd, atd. Drobny problem bude asi predstavovat Model. Je totiz velmi pohodne
niekde v UserModel
ziskat config
alebo povedzme
authenticator
z Environment
. Ked sa vsak rozhodnes na
Environment
vykaslat, zistis ze nemas ako ziskat tieto veci,
pretoze v Modeloch nemas DI kontainer automaticky dostupny (Model si v Nette
riesi kazdy inak). Skus sa preto pozriet na moj clanok
v kucharke, kde sa tymto prave zaoberam.
Editoval srigi (5. 6. 2011 23:18)
- smi
- Člen | 75
srigi napsal(a):
Aby si nemal tolko citania – zapamataj si, ze v Presentari je dostupny DI kontainer (
$this->context
). Skus si ho dumpnut a uvidis co v nom vsetko je:$this->context->params; // konfig direktivy $this->context->session; // sessna
atd, atd. Drobny problem bude asi predstavovat Model. Je totiz velmi pohodne niekde v
UserModel
ziskatconfig
alebo povedzmeauthenticator
zEnvironment
. Ked sa vsak rozhodnes naEnvironment
vykaslat, zistis ze nemas ako ziskat tieto veci, pretoze v Modeloch nemas DI kontainer automaticky dostupny (Model si v Nette riesi kazdy inak). Skus sa preto pozriet na moj clanok v kucharke, kde sa tymto prave zaoberam.
Já to četl, ale furt tomu nerozumím – poraď prosím jednoduše, jak do modelu dostat věc z konfigurace.
Mám v configu jméno tabulky, kterou chci použít v modelu, ale nedostanu se k ní. Třeba při autentizaci nevím kdy a kde se uživatelský model inicializuje.
Díky moc.
- srigi
- Nette Blogger | 558
smi napsal(a):
HosipLan napsal(a):
Ten priklad je na uplny zaciatok s DI uz trosku overkill (vlastny kontainer a tak, hadam sa Filip neurazi, ak sem pridam jednoduchsie riesenie). Keby si kcel uplne najjednoduchsi priklad, bol by to totalne hlupy ModelLoader, ktory iba instancuje Modely:
services:
modelLoader:
# do tejto statickej metody Nette vzdy preda DI\Container
factory: ModelLoader::factory
development < common:
database:
host: localhost
user: php
password: php
# ...
class BasePresenter extends Nette\UI\Presenter {
public function getModel($modelName) {
return $this->context->modelLoader->loadModel($modelName);
}
}
class FooPresenter extends BasePresenter {
public function renderBar() {
$this->template->bar = $this->getModel('bar')->doSomething();
}
}
class ModelLoader {
private $connection;
private $config;
public static function factory(Nette\DI\Container $container) {
$config = $container->params['database'];
// TODO pripojenie na DB
return new self($db, $config);
}
public function __construct($connection, $config) {
$this->connection = $connection;
$this->config = $config;
}
public function loadModel($modelName) {
$class = "Model\\$modelname";
return new $class($this->connection, $this->config);
}
}
namespace Model;
class Bar {
public function __construct($connection, $config) {
// TODO
}
public function doSomething() {
// TODO
}
}
Toto je uplne najminimalnejsi priklad ako sa zbavit Environment
a dostat do svojich Modelov objekty, ktore si predtym ziskaval z
Environment
. Je to dost vela pisania, ale toto je mozne oznacit za
cisty navrh aplikacie.
Editoval srigi (7. 6. 2011 14:49)
- hAssassin
- Člen | 293
@srigi > diky moc za super ukazku tady na foru i v kucharce… konecne tomu DI zacinam prichazet nejen na zoubek ale i na chut… ModelLoader mam vytvorenej a funguje to pekne, zda se mi. Ted se jeste rozhodnou jak cely model resit. Jestli jako jednu vrstvu nebo jak pise PhpGuru jako petivrstvy model. Jinak pouzivam Dibi (database ani notORM se mi sice libi ale nejak se mi do nej nechce :D).