2013-04-18 46 views
0

我想在發生錯誤時更改字段的背景顏色。Symfony 1.4樣式表單字段有錯誤

在Java中的Struts,我可以做這樣的事情:

<s:textfield name="parameter" cssClass="normal_css_class" cssErrorClass="class_on_error" cssErrorStyle="style_on error"/> 

我希望能夠像上面執行的東西。當字段參數有錯誤時,標記呈現字段cssErrorClass。不需要額外的Javascript。

目前,我有以下的(很髒)代碼在我的模板:

<?php if($form['bill_to']->hasError()): ?> 
    <?php echo $form['bill_to']->render(array('style' => 'background-color: red')) ?> 
<?php else: ?> 
    <?php echo $form['bill_to']->render() ?> 
<?php endif; ?> 
<?php echo $form['bill_to']->renderError() ?> 

上面的代碼工作,但有沒有實現它,這樣我只需要調用一個方法:

<?php echo $form['bill_to']->render() ?> 

然後它會執行樣式的設置?我正在考慮重寫render()方法,但我不確定這是否是正確的方法。

回答

2

可以擴展sfWidgetFormSchemaFormatter類是這樣的:

class sfWidgetFormSchemaFormatterCustom extends sfWidgetFormSchemaFormatter 
{ 
    protected 
     $rowFormat     = "<div class=\"%row_class%\">%label% %field% %hidden_fields% %help%</div>", 
     $helpFormat     = "%help%", 
     $errorRowFormat    = "", 
     $errorListFormatInARow  = "\n%errors%\n", 
     $errorRowFormatInARow  = "<span class=\"error\">%error%</span>\n", 
     $namedErrorRowFormatInARow = "%error%\n", 
     $decoratorFormat   = "%content%"; 


    public function formatRow($label, $field, $errors = array(), $help = '', $hiddenFields = null) 
    { 
     $row = parent::formatRow(
      $label, 
      $field, 
      $errors, 
      $help, 
      $hiddenFields 
     ); 

     return strtr($row, array(
      '%row_class%' => (count($errors) > 0) ? ' error' : '', 
     )); 
    } 
}// decorator class 

並將其應用到一個表單裏面的配置是這樣的()方法:

class myForm extends sfForm 
{ 
    public function configure() 
    { 
     // .... 


     $formatter = new sfWidgetFormSchemaFormatterCustom($this->widgetSchema); 
     $this->widgetSchema->addFormFormatter('custom', $formatter); 
     $this->widgetSchema->setFormFormatterName('custom'); 
    } 
}