6

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

2 に答える 2

9

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;

インスタンス化されると、自動的に「定数」を受け取ります。

于 2016-06-27T09:40:30.013 に答える