config.ymlの参照につきまして

780 views
Skip to first unread message

hossy

unread,
Feb 23, 2014, 11:31:59 AM2/23/14
to symfony-...@googlegroups.com
お世話になります。

symfony1.*ではapp.ymlがありどのファイルからもsfConfig::getで呼び出す事ができましたが
symfony2系の場合はconfig.ymlの「parameters」に設定しています。
コントローラークラスでは「$this->container->getParameter」などで呼び出す事が出来るのですが
コントローラー意外のクラス、例えばエンティティクラスやフォームのtypeクラスなどで参照したい
場合、現在はそれだけの為にサービスコンテナに登録して 「arguments: [@service_container]」
のようにして引数をプロパティにいれてそこから「$container->getParameter」で参照しています。

コントローラー意外から呼び出すときはやはりサービスコンテナに登録しないとconfig.ymlの参照は
出来ないのでしょうか?

また、[@doctrine.orm.entity_manager]もコントローラー意外から呼び出すときはサービスコンテナ
に登録して現在は対応しておりますがこちらも同様に呼び出すクラス毎にサービスコンテナに登録
しないとentityManagerの参照はできないのでしょうか?

お手素手はございますがご教授お願いいたします。

hiromi hishida

unread,
Feb 24, 2014, 7:54:37 AM2/24/14
to symfony-...@googlegroups.com
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(ナナウェブ)
菱田裕美
-------------------------------

hossy

unread,
Feb 24, 2014, 5:51:13 PM2/24/14
to symfony-...@googlegroups.com
77webさんありがとうございます。


$this->getContainer()->getParameter('google_analytics_ua')をパラメーターとして渡すのではなく
myclassで直接呼び出したい場合は呼び出すことはできますでしょうか?

よろしくお願いします。

Reply all
Reply to author
Forward
0 new messages