我正在为Apache中的各种与登录相关的函数编写一系列相关的mod_perl处理程序,所以我的Apache配置文件看起来像这样(例如)
PerlAccessHandler MyApache::MyAccess
PerlAuthenHandler MyApache::MyAuthen
PerlAuthzHandler MyApache::MyAuthz
每个模块(MyAccess
,MyAuthen
,MyAuthz
)都定义了
sub handler() {}
在处理请求时,mod_perl
调用相关点。
我想知道的是,是否有一种方法可以使用一个Perl模块而不是三个(对于用户来说安装一个模块而不是3个更简单,更少工作)?
是否有某种方法可以定义处理程序方法的名称。或者有没有办法从handler()
代码中检测出我应该做哪种处理?
答案 0 :(得分:5)
从mod_perl 2.0 docs看来你可以使用“方法”语法来做你想要的事情(我没有测试过这个):
PerlAccessHandler MyApache::MyLoginModule->access_handler
PerlAuthenHandler MyApache::MyLoginModule->authen_handler
PerlAuthzHandler MyApache::MyLoginModule->authz_handler
我相信这会导致mod_perl以MyApache::MyLoginModule
类的静态方式调用每个命名方法。
如果您愿意,还可以在调用handler
方法时创建要使用的对象:
<Perl>
use MyApache::MyLoginModule;
$MyApache::MyLoginModule::access = MyApache::MyLoginModule->new(phase => 'access');
$MyApache::MyLoginModule::authen = MyApache::MyLoginModule->new(phase => 'authen');
$MyApache::MyLoginModule::authz = MyApache::MyLoginModule->new(phase => 'authz');
</Perl>
PerlAccessHandler $MyApache::MyLoginModule::access->handler
PerlAuthenHandler $MyApache::MyLoginModule::authen->handler
PerlAuthzHandler $MyApache::MyLoginModule::authz->handler
这种方法允许您使用单个handler
方法,该方法可以根据在创建对象时设置的对象的属性具有不同的行为。
免责声明:自从我使用mod_perl配置的这一部分已经有一段时间了,所以你的结果可能会有所不同!
答案 1 :(得分:1)
看起来有一种可能是使用push_handlers()
调用并在代码中而不是在apache conf文件中设置处理程序