2011-08-24 87 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

更改供應商源代碼絕不是一個好主意。 –