У меня есть небольшое приложение на основе фреймворка 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
Чтобы завершить ответ Яна, вот как вы передаете свои параметры конфигурации в модель.
Сделайте так, чтобы ваш класс модели ожидал его в качестве параметра конструктора:
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;
он автоматически получит ваши «константы» при реализации.
Если вы храните константы внутри 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
Обратите внимание, что это не может быть рекомендованным подходом. Для получения дополнительной информации смотрите, как использовать ведущий как услуга.