繁体   English   中英

如何从Nette的neon文件中获取值?

[英]How to get values from neon file in Nette?

我有基于Nette框架的小应用程序。

我已经创建了constants.neon文件并将其添加到容器中。 将有一些数据可以从演示者,模型,表格等获得。

如何访问constants.neon值?

我知道有一种方法(new \\Nette\\Neon\\Neon())->decode([NEON_FILE_PATH])但我不认为这是right way 我怀疑在bootstrap.php使用addConfig(...)后,这些配置文件中的所有数据都应该可以在整个系统中使用。

<?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

要完成Jan的答案,以下是将配置参数传递给模型的方法。

使您的模型类期望它作为构造函数参数:

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

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

然后在config(Neon)中将模型注册为服务:

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

将该模型注入演示者时:

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

它会在实时化时自动收到你的'常数'。

如果将常量存储在neon文件中的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

请注意,这可能不是推荐的方法。 有关更多信息,请参阅如何将演示者用作服务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM