Как получить значения из неонового файла в Nette?

У меня есть небольшое приложение на основе фреймворка Nette.

Я создал constants.neon файл и добавить его в контейнер. Там будут некоторые данные, которые должны быть доступны от докладчиков, моделей, форм и т. Д.

Как я могу получить доступ к значениям в constants.neon?

Я знаю что есть метод (new \Nette\Neon\Neon())->decode([NEON_FILE_PATH]) но я не думаю, что это right way, Я подозреваю, что после использования addConfig(...) в bootstrap.php все данные из этих файлов конфигурации должны быть доступны по всей системе.

<?php
// bootstrap.php
require __DIR__ . '/../vendor/autoload.php';

$configurator = new Nette\Configurator;

$configurator->setDebugMode(true); // enable for your remote IP
$configurator->enableDebugger(__DIR__ . '/../log');

$configurator->setTempDirectory(__DIR__ . '/../temp');

$configurator->createRobotLoader()
->addDirectory(__DIR__)
->addDirectory(__DIR__ . '/../vendor/phpoffice/phpexcel')
->register();

$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
$configurator->addConfig(__DIR__ . '/config/constants.neon');

$container = $configurator->createContainer();

return $container;

мой constants.neon файл:

constants:
DP_OPT = 'DP'
PP_OPT = 'PP'
DV_OPT = 'DV'
ZM_OPT = 'ZM'
TP_OPT = 'TP'

Спасибо

ОБНОВЛЕНИЕ № 1

Выяснил, что я использовал неправильный формат .neon файл.

constants:
DP_OPT: DP
PP_OPT: PP
DV_OPT: DV
ZM_OPT: ZM
TP_OPT: TP

4

Решение

Чтобы завершить ответ Яна, вот как вы передаете свои параметры конфигурации в модель.

Сделайте так, чтобы ваш класс модели ожидал его в качестве параметра конструктора:

namespace App\XXX;
class MyModel
{
/** @var array */
private $constants;

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

Затем зарегистрируйте вашу модель как сервис в конфигурации (Neon):

services:
- App\XXX\MyModel(%constants%)

Когда вы вводите эту модель в докладчик:

class DefaultPresenter extends BasePresenter
{
/** @var App\XXX\MyModel @inject */
public $myModel;

он автоматически получит ваши «константы» при реализации.

6

Другие решения

Если вы храните константы внутри parameters массив в неоновом файле, вы сможете получить к нему доступ от докладчика контекст как это:

// $this is instance of Nette\Application\UI\Presenter
$this->context->parameters['constants']

Неоновый файл:

parameters:
constants:
DP_OPT: DP
PP_OPT: PP
DV_OPT: DV
ZM_OPT: ZM
TP_OPT: TP

Обратите внимание, что это не может быть рекомендованным подходом. Для получения дополнительной информации смотрите, как использовать ведущий как услуга.

5

По вопросам рекламы [email protected]