2012-07-24 10 views
6

私はparameters.iniファイルに値を格納しており、私のモデルのプリパシースメソッド中にアクセスする必要があります。エンティティクラスのSymfony2グローバルパラメータへのアクセス

通常、私は$this->container->getParameter('value');を使用しますが、コンテナはエンティティで使用できません。

エンティティクラス内でパラメータを取得する方法はありますか?

P.S.この値は、プレパルス主義者の間で情報を引き出しているサービスのAPIキーです。キー/パスワードをparameters.iniに保存することをお勧めします。

答えて

8

ベストプラクティスは、エンティティを永続化するサービスを使用することです。これはコンテナを注入し、updateMyEntity()サービスメソッドを呼び出すときにパラメータを設定します。お使いのコントローラ(またはものは何でもしたい)インサイド

UserServiceインサイド

$user = new User('foo'); 
$user->setSomeProperty('bar'); 
$userService->update($user); 

public function update(User $user) { 
    $user->setSomeParameter($this->container->getParameter('value')); 
    $this->em->persist($user); 
} 
+1

私はこの基本的な機能(グローバルパラメータを取得したい)よりも少し複雑です。 – MrGlass

+3

S2はグローバルスペースにパラメータを公開しません。本当にあなたが$ kernelにアクセスしてそこから引き出す必要があると感じたら、しかし、本当にサービスを利用すべきです。 – Cerad

4

フロランの答えに加えては、事業体は、純粋にデータオブジェクトであることを意味しています。彼らはあなたのアプリケーション内の他の変数やサービスについて知ってはいけません。 についてもっと興味があるのはなぜですかあなたのエンティティはシステム全体のAPIキーについて何かを知る必要があります。背景情報がほとんどないので、あなたがしようとしていることを再考する必要があります。

APIを使用するには、コンテナを使用するのが理想的です。私はエンティティと何が関係しているのか分かりません。

+0

よかったよ、ありがとう。 – Florent

+0

私は、プレパシーの間に入力された物理的な位置の緯度/経度を引っ張っています。 – MrGlass

+2

サービスでもそれを実行できます。ここでは、正確にそれを行うバンドルがあります:https://github.com/dustin10/VichGeographicalBundle - イベントを使用して、座標を追加する必要のあるエンティティをチェックし、クエリを実行して保存時に更新します。お役に立てれば。 –

関連する問題