How to create own application configuration?

Notice: This thread is very old.
zalizko
Member | 7
+
0
-

Hello everyone!
I'm starting with nette and confusing, I can't realize the elementary thing – own config.
For example I wold like to setup available languages in application.
I have added to the end of config.neon
languages:
- en
- ru
and would like to get somehow this array in the BaseController.

Now my application uses this config throw error:
“Found sections ‘languages’ in configuration, but corresponding extensions are missing.”

Could anybody help me?

Jan Endel
Member | 1016
+
0
-

this section have to be under section “parameters”, some like this:

parameters:
	languages:
		- en
		- ru

hope it helps

zalizko
Member | 7
+
0
-

mm… ok! thanks for reply!
but now how to get this config from controller?

<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter {
	protected function beforeRender() {
		var_dump($this->context->getParameters()['languages']);
	}
?>

right? Finally I have found only this way…

Michal Vyšinský
Member | 608
+
0
-

Clean way is to create a service, which will hold languages. Something like ‘LanguagesStorage’.

Define service:

services:
  - LanguagesStorage(%languages%)

Service class could look like this:

class LanguagesStorage extends Nette\Object
{
  private $languages = array();

  public function __construct(array $languages)
  {
    $this->languages = $languages;
  }

  public function getLanguages()
  {
    return $this->languages;
  }
}

Usage:

class AnyPresenter extends Presenter
{
  /** @var LanguagesStorage @inject */
  public $languagesStorage;

  public function renderDefault()
  {
    dump($this->languagesStorage->languages);
  }
}

And you can inject your service everywhere (in presenter via @inject, in other service via constructor).

Last edited by Michal Vyšinský (2014-06-19 15:29)

zalizko
Member | 7
+
0
-

Uhhh.. thanks! Looks clear now. Service for holding few parameters.. overhead..
Is it here some another way? these parameters in the config.neon, thay saves in the SystemConfigurer? How can I get access to him / her properties? All presenters are nested from BasePresenter then the main logic can be inside BasePresenter (or?).

offtop: one thing related to multilingual, how i can get current language? change it? of couse I can do it by sessio or other things, is there some functionallity out-of-the-box?