2009-02-12 45 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

相關問題