でオーバーライドするデータフォームを管理する新しい戦略を使用します。私のSymfonyプロジェクトでDoctrine_RecordのvalidateメソッドをDoctrine_Template
私はSymfonyフォームオブジェクトを使いたくありませんが、モデルを使ってモデルを作成したいと思っています。
私はBase Doctrine_Recordクラスを再宣言したくないので、新しいDoctrine_Template:ExtendedModelを書きました。
ExtendeModelテンプレートでは、新しいオブジェクトとメソッドがありましたが、Doctrine_Recordのvalidate()関数をオーバーライドする必要があります。
Iは
class ExtendedModel extends Doctrine_Template {
[...]
public $validatorSchema;
public function setValidatorSchema(sfValidatorSchema $validatorSchema) {
$this->validatorSchema = $validatorSchema;
}
public function getValidatorSchema() {
return $this->validatorSchema;
}
public function validate() {
$this->getInvoker()->setup();
$errorStack = $this->getInvoker()->getErrorStack();
if ($this->getValidatorSchema()) {
try {
$this->getValidatorSchema()->addOption('allow_extra_fields', true);
$this->getValidatorSchema()->clean($this->getInvoker()->toArray(false));
} catch (sfValidatorErrorSchema $errorSchema) {
$errorStack = $this->getInvoker()->getErrorStack();
foreach ($errorSchema->getErrors() as $key => $error) {
/* @var $error sfValidatorError */
$errorStack->add($key, $error->getMessage());
}
}
}
$this->getInvoker()->validate();
}
}
と試みたが、教義は、オリジナルの検証()関数を使用します。
Doctrine_Record関数をDoctrine_Templateに宣言された新しいメソッドでオーバーライドしたいとします。
この問題の解決方法を教えてください。
Tnx!
Doctrine_Record_ListenerのpreValidate(Doctrine_Event $ event)関数を使用してvalidate()メソッドの解決策を見つけましたが、他のDoctrine_Record関数をオーバーライドすることはできません – Ephraim