如果表单已提交,我的疯狂设计师希望在字段内显示(红色)消息,并且由于空字段而无效。
有问题的表单是登录提示,我正在使用扩展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);
}
}
答案 0 :(得分:2)
$widget->render(array('value' => $widget->getError()));
答案 1 :(得分:1)
设计师有如此疯狂的想法......
您必须write a custom schema formatter才能执行此操作。您可能必须覆盖the formatRow()
method才能实现此目的。
分析此方法的$errors
数组参数,如果发现其中的“必需”错误,请执行特殊操作。您不需要使用您在问题中发布的代码。