Symfony表单:错误时设置默认值/值?

时间:2011-02-08 13:08:38

标签: php forms symfony1

如果表单已提交,我的疯狂设计师希望在字段内显示(红色)消息,并且由于空字段而无效。

有问题的表单是登录提示,我正在使用扩展sfGuardFormSignin的自定义类

我设法设置了值并添加了一个类...

$this->widgetSchema['username']->setAttribute('class','red');
$this->widgetSchema['username']->setDefault('Required');

..但是,如果用户名字段无效并且由于必填错误,该怎么办呢?

我认为密码字段是一样的吗?

非常感谢提前

修改

感谢greg0ire的建议。我玩过这个游戏,但是sfWidgetFormSchemaFormatter的formatRow方法似乎没有被击中。这是因为我的表单扩展了sfGuardFormSignin并使用了sfGuardAuth插件吗?

class FrontendsfGuardFormSignin extends sfGuardFormSignin
{
  public function configure()
  {
    parent::configure();

    // This works!
    $this->widgetSchema['username']->setLabel('Email');

    // I copied this from the link you pasted
    $decorator = new myWidgetFormSchemaFormatterCustom($this->getWidgetSchema());
    $this->widgetSchema->addFormFormatter('custom', $decorator);
    $this->widgetSchema->setFormFormatterName('custom');
  }
}

/lib/widget/myWidgetFormSchemaFormatterCustom.class.php

class myWidgetFormSchemaFormatterCustom extends sfWidgetFormSchemaFormatter
{

  public function __construct(sfWidgetFormSchema $widgetSchema)
  {
    parent::__construct($widgetSchema);
  }

  public function formatRow($label, $field, $errors = array(), $help = '', $hiddenFields = null)
  {
    // Nothing happens!?
    var_dump($errors);
    die();
    parent::formatRow($label, $field, $errors, $help, $hiddenFields);
  }

}

2 个答案:

答案 0 :(得分:2)

$widget->render(array('value' => $widget->getError()));

答案 1 :(得分:1)

设计师有如此疯狂的想法......

您必须write a custom schema formatter才能执行此操作。您可能必须覆盖the formatRow() method才能实现此目的。

分析此方法的$errors数组参数,如果发现其中的“必需”错误,请执行特殊操作。您不需要使用您在问题中发布的代码。