我想使用strtolower()
函数过滤表单中的某些字段。不幸的是,我找不到任何这样做的例子。
如何编写这样的过滤器,将输入小写,检查数据库是否存在元素,然后决定是否添加记录?
答案 0 :(得分:1)
在您的表单中,您可以覆盖doSave()方法,以执行您需要执行的任何未通过表单验证方法完成的手动干预。
例如:
public function doSave($con = null) {
$employee = $this->getObject();
$values = $this->getValues();
// do your filter
$this->values['name'] = strtolower($values['name']);
parent::doSave($con);
}
答案 1 :(得分:1)
1)新的项目自定义验证器(我们将在这里使用它像值过滤器):
<强> /lib/validator/MyProjectStringLowerCase.class.php 强>
<?php
class MyProjectStringLowerCase extends sfValidatorBase
{
/**
* @see sfValidatorBase
*/
protected function doClean($value)
{
return strtolower($value);
}
}
2)将其绑定到字段:
$this->setWidget('my_field_name', new sfWidgetFormInputText());
$this->validatorSchema['my_field_name'] = new MyProjectStringLowerCase();
如果您已经在该字段上有一些验证器,您可以通过这种方式将它们合并到组合验证器中:
$this->validatorSchema['my_field_name'] = new sfValidatorAnd(array(
$this->validatorSchema['my_field_name'], // the original field validator
new MyProjectStringLowerCase(),
));
组合验证器命令输入值如何通过它们流入,因此如果要在第二次验证中过滤值,请将MyProjectStringLowerCase设置为第一个。
此方法与使用后期处理(例如doSave())之间存在2个不同之处: