2009-02-12 69 views
2

我写了一系列相关mod_perl处理在Apache的各种登录相关的功能的,所以我的Apache配置文件看起来像这样(例如)我可以让一个Perl模块充当多种mod_perl处理程序吗?

PerlAccessHandler MyApache::MyAccess  
PerlAuthenHandler MyApache::MyAuthen 
PerlAuthzHandler MyApache::MyAuthz 

每个模块(MyAccessMyAuthen的,MyAuthz )定义了一个

sub handler() {} 

哪个mod_perl在处理请求的相关点处调用。

我想知道的是是否有一个Perl模块,而不是三个(它只是整洁,少工作,为用户安装一个模块,而不是3)这样做的呢?

有一些方法来定义处理程序方法的名称,也许吧。或者有没有从handler()代码中检测我应该做什么处理的方法?

回答

5

这似乎从mod_perl 2.0 docs,你可以使用“办法”的语法做你想要什么(我没有测试这一点):

PerlAccessHandler MyApache::MyLoginModule->access_handler 
PerlAuthenHandler MyApache::MyLoginModule->authen_handler 
PerlAuthzHandler MyApache::MyLoginModule->authz_handler 

我相信,这将导致mod_perl的对你的每一个012的命名方法调用以静态方式类。

你也可以创建一个对象来调用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的配置,这部分的工作因此您的结果可能会有所不同!

+0

使用 “...> access_handler” 语法的作品。有趣的是,处理程序获得了两个参数(第二个参数是请求对象),与handler()函数不同,后者只通过请求。 – AndrewR 2009-02-16 10:43:32

1

看起来像一个可能性是使用push_handlers()调用和设置在代码中的处理程序,而不是在Apache的conf文件

在这里看到:http://tinyurl.com/bwdeew

相关问题