0

欢迎我有一个文件 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 中获取变量?我问一个例子?

4

2 回答 2

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

于 2012-12-07T15:01:39.430 回答
0

也许您想做一些事情,比如为 bundle 公开语义配置

这是如果您想从根级别配置“命名空间”(如“d_facebook”)获取配置。您将在包的 DependencyInjection 文件夹中创建一个配置和一个扩展类。配置类将有一个“getConfigTreeBuilder”方法,该方法将为您的命名空间中的键定义设置。然后扩展类将有一个“加载”方法,该方法将接收解析的配置并能够使用 $container->setParameter('key', 'value') 来允许访问其他类中的配置。链接的食谱有更多详细信息。

于 2012-12-08T00:38:54.217 回答