Nacteni udaju z config.neon pro odeslani emailu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ras
Člen | 135
+
0
-

Zdravim vsechny,

stahl jsem si posledni verzi Nette2 (2011–08–08) pro PHP 5.3. Mam prekopirovany sandbox a drobne upraveny cesty na APP, LIBs, atd. … jinak je to bez uprav.

config.neon mimo jine obsahuje

common:
  services:
    mailer:
      host: smtp.mujserver.cz
      port: 25
      username: webformular@mujserver.cz
      password: aabbcc
      timeout: 10
      transport: tls

production < common:
email:
  from: noreply@domena1.cz
  toInternal: xxx@domena1.cz

development < common:
email:
  from: noreply@domena1.cz
  toInternal: aaa@domena1.cz

HomepagePresenter.php bych pote rad v ramci protected function createComponentNapisteMiForm() provedl nacteni techto udaju z configu ve funkci sendMail

private function sendMail($values)
{
  $mail = new Message;
  $mail->setFrom(????, 'Webovy automat - domena2.cz');
  ...
  ...
  $template->setFile(????->dir."/mailBody.latte");
  ...
  ....

  return $return;
}

Drive jsem to nacital pres Environment::getConfig(‚email‘)->neco_z_configu ci Environment::getConfig(‚templates‘)->… ale ted to proste pres nove DI nejsem nejak sto rozchodit.

Dekuji za radu, nasmerovani ci nejaky kus kodu.

pave.kucera
Člen | 122
+
0
-

V presenteru se k údajům z konfigu dostaneš následujícím způsobem

<?php
$this->context->params;
?>
ras
Člen | 135
+
0
-

AHA, omluva. Ja zapomenul hned na zacatku uvest, ze kdyz zadam v presenteru

dump($this->context->params);

tak dostanu JEN takovyho vysledek

array(6) {
   productionMode => FALSE
   consoleMode => FALSE
   wwwDir => "nejaka_cesta\web"
   appDir => "nejaka_cesta\web_app"
   libsDir => "nejaka_cesta\web_libs"
   tempDir => "nejaka_cesta\web_app/../web_temp"
}

a to je vse … tedy ani slovo o necem z config.neon

Kazdopadne, kdyz v bootstrapu zmenim nazev config.neon na napr. confi.neon, tak me to okamzite hlasi, ze takovy soubor neexistuje → z toho usuzuji, ze config.neon se nacita.

bootstrap (klasika ze sandboxu)

$container = $configurator->loadConfig(__DIR__ . '/config.neon');

Takze co ted?

22
Člen | 1478
+
0
-

máš blbě tabulátory bych řekl, email a spol. by mely být o úroveň níž než např. production < common

ras
Člen | 135
+
0
-

Jeste nez to vyzkousim, tak bych rekl, ze to tim prece byt nemuze. Problem je v tom, ze mi v dump($this->context->params); nic nevypise a na to prece nemuze mit vliv umisteni v config.neon … vypis context param prece neresi, zda to mam spravne logicky zapsane (pokud dodrzuji konvenci YAMLu) … nebo se pletu ?

pave.kucera
Člen | 122
+
0
-

@22 má pravdu, máš to špatně odsazené. Cokoli, co je na první úrovni je „sekce“, která se dá načíst přes Nette\Configurator::loadConfig, takže teď tam máš sekce common, production, development a email.

ras
Člen | 135
+
0
-

Po vyzkouseni omluva to 22 → opravdu stacilo posunout vse v production < common o jeden „odskok“ a jiz se mi to opravdu vypisuje … diky

ras
Člen | 135
+
0
-

Vyse uvedenym zpusobem jsem poresil prvni nahradu Enviroment a co ta druha … haze to chybu
Trying to get property of non-object

na radku

$template->setFile(Environment::getConfig('templates')->dir."/mailBody.latte");

Muzu jeste poprosit o jednu radu …?

22
Člen | 1478
+
0
-
$this->context->params['appDir'] . '/pathToTemplate';
ras
Člen | 135
+
0
-

;o) … nojo, jasne … ;o) vzdy je to uplne jasne … diky za nakopnuti.

Patrik Votoček
Člen | 2221
+
0
-

nebo se dá použít trochu magické:

$this->context->expand('%appDir%/pathToTemplate');

:-)