如何从config.yml文件中获取变量?

时间:2012-12-06 22:13:43

标签: php symfony

欢迎 我有一个文件config.yml

d_facebook:
    file:   %kernel.root_dir%/../src/FacebookBundle/Facebook/FacebookInit.php
    app_id: 296925470418713
    secret: fb4d0a99bcf80e55f47077ffadcac921
    cookie: true
    permissions: [email, user_birthday, user_location, user_about_me, user_location]

然后我有这个类,它从文件config.yml

中检索数据
<?php

namespace D\FacebookBundle\Facebook;

use Symfony\Component\Yaml\Yaml;
use Symfony\Component\DependencyInjection\ContainerBuilder;

use D\FacebookBundle\Facebook\Facebook;
use D\FacebookBundle\Facebook\FacebookConfig;

class FacebookInit
{
    public $hAPI;
    public $userProfile;
    public $user;
    public $logoutUrl;
    public $loginUrl;
    public $config;

    public function __construct()
    {
        $this->config = Yaml::parse('/facebookx/app/config/config.yml');

        $this->hAPI = new Facebook(array(
            'appId' => $this->config['d_facebook']['app_id'],
            'secret' => $this->config['d_facebook']['secret']
            ));
        $this->setUserProfile();
    }
}

有什么更好的方法可以做到这一点?如何从config.yml文件中获取变量? 我问一个例子?

2 个答案:

答案 0 :(得分:1)

在您的配置文件中,您将拥有以下内容:

parameters:
    d_facebook:
        file:   %kernel.root_dir%/../src/FacebookBundle/Facebook/FacebookInit.php
        app_id: 296925470418713
        secret: fb4d0a99bcf80e55f47077ffadcac921
        cookie: true
        permissions: [email, user_birthday, user_location, user_about_me, user_location]

从S2控制器中,您可以获得一系列参数:

$faceBookParameters = $this->container->getParameter('d_facebook');

但是,您可能希望将您的Facebook类作为服务并使用依赖注入来设置参数。所以在你的services.yml:

services:        
    facebook:
        class:  Path\To\Facebook
        arguments:  
            - '%d_facebook%'  # This injects your parameters

你可以在控制器中执行:

$facebook = $this->get('facebook');

再次阅读有关服务的部分。 http://symfony.com/doc/current/book/service_container.html

答案 1 :(得分:0)

也许你想做expose a semantic configuration for a bundle之类的事情?

如果您想从根级别配置“命名空间”(例如“d_facebook”)获取配置。您将在bundle的DependencyInjection文件夹中创建Configuration和Extension类。配置类将有一个'getConfigTreeBuilder'方法,该方法将定义可以在命名空间中的键的设置。然后扩展类将有一个'load'方法,它将接收已解析的配置,并能够使用$ container-&gt; setParameter('key','value')来允许访问其他类中的配置。链接的食谱有更多细节。