2010-04-06 48 views
1

我在當前項目中使用HTMLPurifier,並且我不確定處理多個配置的最有效方法。大多數情況下,唯一主要的變化是允許的標籤。處理多個HTMLPurifier配置的有效方法

目前我有一個私有方法,在每個使用HTMLPurifier的類中,當需要配置時會調用它,並且它會從默認值創建一個。我對此並不滿意,好像兩個類正在使用相同的配置,這是重複的代碼,以及如果一個類需要2個配置會怎麼樣?它只是感覺混亂。

其中一個好處是,它是懶惰的,它不會創造任何東西,直到需要它。各種類別都可以使用,從來不需要淨化任何東西。所以我不想創建一堆甚至可能不被使用的配置對象。

我剛剛發現,你可以創建HTMLPurifier的一個新的實例,並直接設置配置選項,如下所示:

$purifier = new HTMLPurifier(); 
$purifier->config->set('HTML.Allowed', ''); 

我不知道這是不好的形式在所有與否,如果是不是我真的不確定一個好方法來使用它。

我最近的想法是創建一個配置處理程序類,它只會返回一個HTMLPurifier配置,用於後續的純化調用。在某些時候,它可能會擴展爲允許設置配置,但從一開始我就認爲它們只是硬編碼,並通過交換機運行一個方法參數來獲取所需的配置。也許我可以發送存儲的純化器實例作爲參數,並讓方法直接在上面設置配置,如上所示?

這對我來說似乎是我想到的幾種方式中最好的,但我不確定這樣的任務是否需要創建一個類來處理它,如果是這樣,如果我以最好的方式處理它辦法。

我不太熟悉HTMLPurifier的內部工作,所以我不確定是否有更好的機制來處理多個配置。

感謝任何人都可以提供的見解。

回答

1

我剛剛寫了一個快速,簡單的配置處理程序類。

您可以查看/使用@http://gist.github.com/358187/

它需要在初始化CONFIGS的數組。

$configs = array(
    'HTML.Doctype' => 'HTML 4.01 Strict', 

    'posts' => array(
    'HTML.Allowed' => 'p,a[href],img[src]' 
), 
    'comments' => array(
    'HTML.Allowed' => 'p' 
), 

    'default' => array(
    'HTML.Allowed' => '' 
) 
); 

將指令直接放入數組是全局的,並將應用於所有配置。如果在命名配置中設置相同的指令,則將使用命名配置中的值。

然後你可以抓住一個配置,如下所示:

$purifierConfig = new purifierConfig($configs); 
$commentsConfig = $purifierConfig->getConfig('comments'); 

,或者簡寫:

$commentsConfig = $purifierConfig['comments']; 

如果請求的配置不存在或沒有配置,那麼在通話中,默認配置中指定將被退回。

我可能在某個時候充實它,但現在這個工作。

我一直在尋找人們在他們的項目中如何處理這些事情,或者是否有任何內置機制讓這樣的事情變得更加乏味,但我想我的問題範圍太狹窄了。

2

配置對象有一個重要的不變性:在它們被用於執行純化之後,它們不能被編輯。您可能對該類有一些convenience methods感興趣,特別是inherit,並且您可以使用loadArray加載一組值。

+0

啊謝謝,不知道一旦配置被使用,它不能被編輯。這使得我顯示的位不可行。 - 這些方法似乎使創建配置更方便,儘管我在管理和使用它們時更加註重方便。 - 關於最好的方式去思考的任何想法?謝謝。 – anomareh 2010-04-06 02:29:30

+0

那麼,你可以通過將舊的傳遞給構造函數來便宜地創建另一個配置對象。 – 2010-04-06 17:31:34

+0

我一直在尋找更多的信息,這些信息與我在答覆中發佈的內容相符。我沒有創建配置的問題,這很好。我一直在尋找其他人如何處理管理幾種不同的配置,以及是否有任何內置機制來使這種任務更加簡化。 - 感謝您的回答和評論。它幫助我認識到我正在嘗試做的一些事情。 – anomareh 2010-04-06 22:42:48