2010-08-16 32 views
8

跨多個MVC層使用的函數放置的最佳實踐是什麼?應該在哪裏放置「全局」Symfony函數?

我最近不得不編寫一些在視圖和模型中都使用的統計函數。如果我把它們放在幫助器中,我會卡住在模型層中加載幫助器,這很煩人,看起來不正確,並且當從一個任務調用這些函數(因爲沒有默認上下文)時會完全中斷。如果我把它們放在頂層lib目錄中,我會在視圖中停止撥打電話Stats::normalPercentile

還有其他的選擇嗎? Symfony的開發者是否有評論這些功能應該放在哪裏?

編輯:顯然,在視圖中進行靜態調用沒有問題。我推斷這是基於Symfony而不是將他們的助手編寫爲類(即使在significant discussion之後)。那麼,是否有任何這樣的文件放置的約定?只要把它們扔進lib/util

回答

7

關於你的編輯,symfony的幫手是這樣寫的,以避免混淆視圖的語法,對於那些通常接觸到一點PHP的技術較差的人來說可能不熟悉 - 功能是「香草」PHP中的一等公民。這是Ruby on Rails中的一個哲學,它啓發了這部分框架。

lib/中存儲文件是個人喜好,因爲symfony並不介意,但命名建議lib/vendor/yourname

如果這是很好的代碼,你可能想在那個小yourname目錄竭力捍衛它......如果它確實代碼,您可能要package it and share it with others :)

1

靜態調用有什麼問題?我認爲它非常適合幫助函數(比函數更好,因爲您有一種名稱空間)。

在視圖中收集統計信息很奇怪。你爲什麼不採取行動呢?

大概正確的答案取決於你試圖解決的問題的種類(你沒有解釋你的幫手應該做什麼)。我通常使用這樣的助手來完成不需要額外的類或者調用的常見任務(比如「stripText」)。

+0

我同意:沒有錯靜態調用在意見中。如果OP不喜歡它,他應該創建一個掩護他們的幫手。 – Maerlyn 2010-08-16 18:16:16

+0

我不是在視圖中收集統計數據,但是我正在計算像一個值的百分位數。 我想我推斷(不正確)靜態調用在視圖上皺起了眉頭,因爲Symfony不把他們的助手放在類中。 – 2010-08-16 18:37:09

0

統計計算不屬於視圖。考慮將它們添加到模型層。 lib/utillib/model對我來說似乎都行。例如,你可以有一個類PercentileSequence與數據美聯儲可能會在您的視圖和任務都像這樣被重用:

// in your action, component or task 
$this->mySequence = new PercentileSequence($data); 

// in your view (if PercentileSequence implements Iterator) 
<?php foreach ($mySequence as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 
// or use plain old array 
<?php foreach ($mySequence->getRanks() as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 

這應該是一個任務中的相同。

+0

請不要辯論這個問題的基礎。你能想象一個需要在模型和視圖中被調用的函數嗎?好。這就是我在這裏談論的。對這個特定的實例*是否是其中之一的爭論正在減損我的問題。 – 2010-08-16 20:39:01

+0

也許這就是爲什麼你在模型層加載幫助器或調用靜態方法的原因:)無論如何,我投了你的問題。我希望有人會有一個很好的答案。 – lunohodov 2010-08-17 07:24:51

+0

我最初的迴應有點粗魯。這個問題是我的寵物。相信我,我在這裏做的事情既合適又必要:) – 2010-08-17 13:13:54