我想在发生错误时更改字段的背景颜色。
在Java Struts中,我可以这样做:
<s:textfield name="parameter" cssClass="normal_css_class" cssErrorClass="class_on_error" cssErrorStyle="style_on error"/>
我希望能够执行上述操作。当field参数有错误时,标记会呈现字段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()方法,但我不确定它是否是正确的方法。
答案 0 :(得分: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
并将其应用于其内部的configure()方法中的表单:
class myForm extends sfForm
{
public function configure()
{
// ....
$formatter = new sfWidgetFormSchemaFormatterCustom($this->widgetSchema);
$this->widgetSchema->addFormFormatter('custom', $formatter);
$this->widgetSchema->setFormFormatterName('custom');
}
}
答案 1 :(得分:0)
您可能需要查看表单格式化程序,请参阅http://www.symfony-project.org/api/1_4/sfWidgetFormSchemaFormatter。
当您使用sfForm的configure方法时,可以使用$this->getWidgetSchema()->getFormFormatter()
获取formformatter对象。