29

私はsymfony 2を使用しており、devとprodの2つの構成があります。エンティティまたはモデル内でどちらを使用しているかを知る必要があります。

AppKernel.php にある次のコードに似たものを探しています。

$this->getEnvironment()

これを呼び出すためにカーネルをロードできれば素晴らしいのですが、これを行う方法が見つかりません。これを調べたところ、symfony イベントはカーネルを返す可能性があるようですが、これらのイベントを getKernel() を呼び出すためにキャプチャする方法や場所がわかりません。http://symfony.com/doc/current/book/internals.html

たとえば、次の例がリストされています。

Symfony\Component\HttpKernel\Event\FilterControllerEvent を使用します。

public function onKernelController(FilterControllerEvent $event)
{
    $controller = $event->getController();
    // ...

    // the controller can be changed to any PHP callable
    $event->setController($controller);
}

このコードブロックをどこに置くべきか私にはわかりません。カーネルに入れる必要があるように思えます。カーネルがあれば、この問題は発生しません。

私の質問は、カーネルで設定されているように、サービスまたはモデルから「dev」または「prod」にいるかどうかを判断する簡単な方法があるかどうかです。ありがとう

4

4 に答える 4

53

コンソールによって生成される既定のエンティティ クラスは、何も継承しません。これは、それらが「ContainerAware」ではないことを意味します。

そして、一般的に言えば、そうあるべきではないと思います。何をしているかにもよると思いましたが、基本的な依存性注入でこれを処理できます

コントローラーで:

$entity = new \Your\Bundle\Entity\Foo(
  $this->container->get( 'kernel' )->getEnvironment()
);

そしてsrc/Your/Bundle/Entity/Foo.php に

private $env;

public function __construct( $env=null )
{
  $this->env = $env;
}

これはうまくいきますか?

PSあなたが投稿したイベントリスナーはコントローラー用であり、任意のクラス用ではありません。

于 2012-05-17T19:00:45.447 に答える
19

パラメータとして取得することも可能です。\Symfony\Component\HttpKernel\Kernelクラスを見ると、getKernelParameters()すべてのカーネル パラメータを公開するメソッドが見つかります。

/**
 * Returns the kernel parameters.
 *
 * @return array An array of kernel parameters
 */
protected function getKernelParameters()
{
    $bundles = array();
    foreach ($this->bundles as $name => $bundle) {
        $bundles[$name] = get_class($bundle);
    }

    return array_merge(
        array(
            'kernel.root_dir' => realpath($this->rootDir) ?: $this->rootDir,
            'kernel.environment' => $this->environment,
            'kernel.debug' => $this->debug,
            'kernel.name' => $this->name,
            'kernel.cache_dir' => realpath($this->getCacheDir()) ?: $this->getCacheDir(),
            'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(),
            'kernel.bundles' => $bundles,
            'kernel.charset' => $this->getCharset(),
            'kernel.container_class' => $this->getContainerClass(),
        ),
        $this->getEnvParameters()
    );
}

したがって、services.ymlファイルでは環境を取得できますが%kernel.environment%、コンテナ対応クラスでは次のようにして取得できます。

$this->getContainer()->getParameter('kernel.environment');

github の Kernel.php クラスを参照してください。

于 2015-04-24T11:26:33.140 に答える