2012-05-31 31 views
3

我正在使用CakePHP(2.x)的應用程序,並且我正在重新使用一些設置,每當我創建窗體時,所以我決定擴展默認的FormHelper類,它會自動加載如果沒有其他內容被傳入,則爲默認值(請參閱下面的代碼)。CakePHP擴展FormHelper使錯誤不能正確報告

<?php 

class AppFormHelper extends FormHelper 
{ 
    public function input($fieldName, $options = array()) 
    { 
     $defaults = array(
      'class' => 'input', 
      'div' => array(
          'class' => 'button-height block-label margin-bottom' 
         ) 
     ); 

     $options = Set::merge($defaults, $options); 

     return parent::input($fieldName, $options); 
    } 
} 

乍一看,這在我看來像這樣調用$this->AppForm->input('test');時看起來很完美。但是,當表單提交併出現錯誤時,該錯誤不會顯示在屏幕上。當調用$this->Form->input('test')並且有一個錯誤,一個div被創建看起來是這樣的:

<div class="error-message">This form had an error</div> 

最終,我只是想有一個簡單的方法來複制的表單助手輸入選項,並認爲這是正確的這樣做的方式,但由於它造成的問題,我不知道了。任何人都知道如何讓錯誤再次出現,或者有更好的解決方案來爲FormHelper提供默認選項。

謝謝!

+3

對我來說,這似乎是一個非常合理的方法。不知道這是否會成爲問題,但是您是否將AppFormHelper用於整個表單?我經常使用從FormHelper自己繼承的自定義助手,並且至少在使用SecurityComponent時將核心助手與我的混合帶來問題。也許這裏發生了類似的事情? – nIcO

+0

你是對的。我試圖改變這個領域的其他投入,但不是整個形式。感謝評論,你完全解決了我的問題。 – cyphun

回答

4

好吧,正如我的評論解決了您的問題,我冒昧地將它寫爲答案...... ;-)順便說一句,我很高興我能幫助您!

對我來說,這似乎是一個非常合乎邏輯的方法。

不知道如果這可能是問題,但你使用你的AppFormHelper整個表單?我經常使用從FormHelper自己繼承的自定義幫助器,並且將核心幫助器與我的混合可能會帶來一些問題,例如,如果您使用SecurityComponent。

也許這裏發生了類似的事情嗎?

+0

爲了澄清,這意味着使用例如'$ this-> AppFormHelper-> create();','$ this-> AppFormHelper-> end()',等等。謝謝,幫助我解決了我的問題! – Gus

0

正如nIcO指出的那樣,這是一個很好的解決方案,但是我沒有使用我的AppFormHelper來完成整個表單。所以這個效果很好,但要確保你使用的是整個表單上使用的自定義類。

2

要在蛋糕2.0重寫的HtmlHelper方法,你可以簡單地說:通過ADmad

$helpers = array('Html' => array('className' => 'OwnHelper')); 

創建包含例如您OwnHelper類的鏈接方法,它擴展的HtmlHelper,在AppController的指定