我已经在我的symfony项目中的一些实例类中添加了一些功能,我希望我的所有实例类都具有这些功能。如果我对编辑核心symfony安装没有任何疑虑,我只需将我的方法直接添加到sfDoctrineRecord
类。但是我当然不希望这样做,因为我的更改会在升级时中断,而且我的更改不会很好地移植到其他项目中。
如果我想在symfony中为我的所有实例类添加某些功能,那么“正确”的方法是什么?
(P.S。当我说“实例课”时,我的意思是lib/model/doctrine/Customer.class.php
。)
答案 0 :(得分:6)
步骤:
创建myDoctrineRecord
abstract class myDoctrineRecord extends sfDoctrineRecord
{
public function commonRecordMethod() { }
}
我将此文件放在lib / record中,但您可以将其放在自动加载器可以看到的任何位置。
设置Symfony以在ProjectConfiguration的configureDoctrine回调中使用此类:
public function configureDoctrine(Doctrine_Manager $manager)
{
sfConfig::set('doctrine_model_builder_options', array('baseClassName' => 'myDoctrineRecord'));
}
就是这样! Symfony不是很棒吗? :)
答案 1 :(得分:2)
我认为正确的方法可能是将Doctrine_Template添加到相关模型中,但是您需要将其定义为schema.yml
class MyMethodsTemplate extends Doctrine_Template
{
public function customMethod1(){
$model = $this->getInvoker();
//do stuff with model
}
public function customMethod2(){
$model = $this->getInvoker();
//do stuff with model
}
}
然后在你的schema.yml:
ModelName:
actAs:
MyMethodTemplate: ~
# the rest of your definition
重建后,您应该可以致电:
$model = new ModelName();
$model->customMethod1();
$model->customMethod2();
当然,Doctrine模板和监听器比这更强大。你应该看看documentation的体面概述