首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Doctrine_Template重写Doctrine_Record验证方法

用Doctrine_Template重写Doctrine_Record验证方法
EN

Stack Overflow用户
提问于 2010-12-21 17:26:29
回答 1查看 445关注 0票数 1

在我的Symfony项目中,我将使用一种新的策略来管理数据表单。

我不想使用Symfony表单对象,但我想使用模型来构建它们。

我不想重新声明基础Doctrine_Record类,所以我写了一个新的Doctrine_Template: ExtendedModel。

在验证模板中,我有新的对象和方法,但我需要覆盖Doctrine_Record的ExtendeModel ()函数。

我试着用

代码语言:javascript
复制
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使用原始的validate()函数。

我想用在我的Doctrine_Template中声明的新方法覆盖一些Doctrine_Record函数。

你能给我一个解决这个问题的建议吗?

Tnx!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-21 22:37:04

模板不会覆盖Doctrine_Record方法,它们只是在找不到本机方法时通过PHP魔法__call方法调用的后备方法。

为此,您需要在Doctrine_Record继承链中拥有自己的类。幸运的是,这非常简单:

1.创建myDoctrineRecord

代码语言:javascript
复制
abstract class myDoctrineRecord extends sfDoctrineRecord
{
   public function commonRecordMethod() { }
}

我将这个文件放在lib/record中,但是您可以将它放在自动加载器可以看到的任何位置。

2.将Symfony设置为在ProjectConfiguration的configureDoctrine回调中使用此类:

代码语言:javascript
复制
public function configureDoctrine(Doctrine_Manager $manager)
{
   sfConfig::set('doctrine_model_builder_options', array('baseClassName' => 'myDoctrineRecord'));
}

这是从我的previous answer to a similar question复制/粘贴的。您还必须重新构建模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4497791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档