2011-08-24 89 views
0

我想为每个环境配置view.yml。为每个环境配置view.yml

在生产中:

default: 
    http_metas: 
    content-type: text/json 

在开发:

default: 
    http_metas: 
    content-type: text/html 

我需要这个,因为我想调试与网页调试工具JSON响应。所以,我基本上需要设置每个环境的响应内容类型。是否有可能做到这一点?如果没有,什么是正确的地方挂钩?

回答

1

你不能在view.yml中完成而不需要重写整个视图配置处理程序。我想有一对夫妇为这个具体的例子替代品:

  • 你可以使用它允许你指定不同的配置文件,不同尺寸的ysfDimensionsPlugin。

  • 你可以通过在过滤器链中添加或扩展过滤器来实现这一点,我想我会通过扩展sfRenderingFilter来做到这一点。

但是,如果您只是想检查JSON输出,为什么不使用Firebug或Web Inspector?

+0

不,我想检查数据库调用等。在web调试工具栏,如果它是html内容类型,则它只被注入到响应中。 – Dziamid

0

打开文件lib/symfony/config/sfViewConfigHandler.class.php

现在可通过以下取代“mergeConfig”功能,您的问题将得到解决:)

protected function mergeConfig($myConfig) 
    { 
    // merge javascripts and stylesheets 
    $myConfig['all']['stylesheets'] = array_merge(isset($myConfig['default']['stylesheets']) && is_array($myConfig['default']['stylesheets']) ? $myConfig['default']['stylesheets'] : array(), isset($myConfig['all']['stylesheets']) && is_array($myConfig['all']['stylesheets']) ? $myConfig['all']['stylesheets'] : array()); 
    unset($myConfig['default']['stylesheets']); 

    $myConfig['all']['javascripts'] = array_merge(isset($myConfig['default']['javascripts']) && is_array($myConfig['default']['javascripts']) ? $myConfig['default']['javascripts'] : array(), isset($myConfig['all']['javascripts']) && is_array($myConfig['all']['javascripts']) ? $myConfig['all']['javascripts'] : array()); 
    unset($myConfig['default']['javascripts']); 

    // merge default and all 
    $myConfig['all'] = sfToolkit::arrayDeepMerge(
     isset($myConfig['default']) && is_array($myConfig['default']) ? $myConfig['default'] : array(), 
     isset($myConfig['all']) && is_array($myConfig['all']) ? $myConfig['all'] : array(), 
     isset($myConfig[sfConfig::get('sf_environment')]) && is_array($myConfig[sfConfig::get('sf_environment')]) ? $myConfig[sfConfig::get('sf_environment')] : array() 
    ); 
    unset($myConfig['default']); 
    $this->yamlConfig = $myConfig; 
    } 
+1

更改供应商源代码绝不是一个好主意。 –