我有一个包检查功能,需要检查登录用户是否有一个有效的包。此功能在所有模块中都是相同的,但在每个模块操作中都不需要。
protected function checkPackage()
{
if($this->MscdbProject->getCurrentPackage()){
return;
}
$this->getUser()->setFlash('error',"Your package has expired, to restore access to your project please contact us to renew it.");
$this->redirect('project/index');
}
我需要在多个模块的大多数模块操作中访问此函数,但它依赖于MscdbProject变量,该变量在各个操作中被拉出,这在不同的模块中是不同的,因此无法标准化。
目前我在每个模块中都复制了这个功能,我从需要它的每个动作中调用它。
如何重构这一点以避免重复? 感觉过滤器应该能够做到这一点,但我必须先拉出MscdbProject实例才能检查包状态。
由于
答案 0 :(得分:2)
将您的操作类的基类更改为您自己的基类:
class myAction extends sfAction {
abstract protected function getMscdbProject();
protected function checkPackage()
{
if($this->getMscdbProject()->getCurrentPackage()){
return;
}
$this->getUser()->setFlash('error',"Your package has expired, to restore access to your project please contact us to renew it.");
$this->redirect('project/index');
}
}
现在,您的模块操作必须使用自己的逻辑来实现getMscdbProject()
。
如果您使用的是生成的模块,请在generator.yml
:
generator:
param:
actions_base_class: myAction