如何在 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
我有一个包检查功能,需要检查登录用户是否有有效的包。此功能在所有模块中都是相同的,但并非每个模块操作都需要。
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