strtolower()
関数を使用してフォームの一部のフィールドをフィルタリングしたいと思います。残念ながら、私はそれを行う例を見つけることができません。symfonyフォームクラス内でフォーム入力をフィルタリングする
入力を小文字にし、要素が存在するかどうかデータベースをチェックし、レコードを追加するかどうかを決定する、そのようなフィルタを作成するにはどうすればよいですか?
strtolower()
関数を使用してフォームの一部のフィールドをフィルタリングしたいと思います。残念ながら、私はそれを行う例を見つけることができません。symfonyフォームクラス内でフォーム入力をフィルタリングする
入力を小文字にし、要素が存在するかどうかデータベースをチェックし、レコードを追加するかどうかを決定する、そのようなフィルタを作成するにはどうすればよいですか?
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(),
));
組み合わせたバリデータは値があなたが価値を持つようにしたいので、もし、それらの谷に流れますか流入を注文します2番目の検証でフィルタリングされ、最初のものとしてMyProjectStringLowerCaseを設定します。
は、このアプローチと(例えばにdoSave()など)を使用して後処理の間に2つの違いがある:
フォームでは、doSave()メソッドをオーバーライドして、フォーム検証メソッドで完了していない手動介入を行うことができます。例えば
:
public function doSave($con = null) {
$employee = $this->getObject();
$values = $this->getValues();
// do your filter
$this->values['name'] = strtolower($values['name']);
parent::doSave($con);
}
内の他のフィールドやフォームで非常にきれいにし、簡単にそれを再利用することができ、OPはまた彼の 'Employee.classに置くことができます。 php' class: 'public function setName($ name)$ this - > _set( "name"、$ name); ' – Flukey
はい。 Flukeyが正しいです。あなたが常にそのようにそれらを格納しようとするなら、あなたはsetterメソッドをオーバーライドする方がずっと良いです。 – richrosa