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

how can I add a function to be accessed from multiple modules in single app in sf 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 实例才能检查包状态。

谢谢

将您的操作 class 的基础 class 更改为您自己的基础:

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