77webです。
コンテナ自体を注入しなくても、parameters.ymlの設定値は、設定名を%と%で囲うことで直接注入できます。
#parameters.yml
parameters:
google_analytics_ua: "UA-XXXX-XX"
#src/Acme/DemoBundle/Resources/services.yml
services:
acme.demo.my_class:
class: Acme\DemoBundle\MyClass
arguments: [%google_analytics_ua%]
また、注入先のクラス(上の例ではMyClass)が、特にサービスとして使う必要が無いクラスなのであれば、コントローラ内で直接インスタンス化することもできます。その場合、parameters.ymlの設定値はコントローラ内でコンテナから取得して渡すことになります。
// src/Acme/DemoBundle/Controller/DefaultController.php
public function indexAction()
{
// ...
$myClass = new
\Acme\DemoBundle\MyClass($this->getContainer()->getParameter('google_analytics_ua'););
// ...
}
又は、注入先のクラスの側に注入用のメソッドを作っておき、そのメソッドを使って注入するという方法もあります。
public function indexAction()
{
// ...
$google_analytics_ua =
$this->getContainer()->getParameter('google_analytics_ua');
$myClass = new \Acme\DemoBundle\MyClass();
$myClass->setGoogleAnalyticsUa($this->getContainer()->getParameter('google_analytics_ua'));
// ...
}
個人的には、コンテナ自体を注入するというのは最後の手段にしたほうが良いと思っています。
# 識者の方々どうでしょうか?(汗)
注入先のクラスの側は、必要な設定値がどんな設定名でparameters.ymlに定義されているか知っている必要はなく、設定値そのものだけ利用するように書くことで、変更に対してより強くなる(最終的にSymfonyそのものへの依存もなくすことができる)と考えられるからです。
2014年2月24日 1:31 hossy <
hos...@gmail.com>:
> --
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
>
http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
>
http://groups.google.com/group/symfony-users-ja
>
> ---
> このメールは Google グループのグループ「日本Symfonyユーザー会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、
symfony-users-...@googlegroups.com
> にメールを送信します。
> その他のオプションについては、
https://groups.google.com/groups/opt_out にアクセスしてください。
--
-------------------------------
77-WEB(ナナウェブ)
菱田裕美
-------------------------------