如何在sf 1.4中的单个应用程序中添加要从多个模块访问的功能

时间:2015-04-30 14:41:01

标签: symfony-1.4

我有一个包检查功能,需要检查登录用户是否有一个有效的包。此功能在所有模块中都是相同的,但在每个模块操作中都不需要。

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实例才能检查包状态。

由于

1 个答案:

答案 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