2012-02-03 61 views
1

我正在構建一個模塊化的Padrino應用程序來掛載多個應用程序。在應用程序之間共享過濾器

我一個基本應用程序安裝到/

class BaseApp < Padrino::Application 
    ... 
end 

我然後安裝其他appilications到其它端點,如/clients和這些應用程序在基本應用程序繼承:

class ClientsApp < BaseApp 
    ... 
end 

這傳承允許我爲BaseApp類定義我的所有設置,錯誤處理和app.rb中的任何包含的機架中間件。

到目前爲止這麼好。 但我也想分享beforeafter之間的路由應用程序。例如,在我BaseApp控制器代碼我想這樣做:

BaseApp.controller do 
    before do 
    ... 
    end 
    after do 
    ... 
    end 

    get :index do 
    ... 
    end 
end 

,而不是我ClientsApp控制器代碼重複這些過濾器,像這樣:

ClientsApp.controller do 
    before do 
    ... 
    end 
    after do 
    ... 
    end 

    get :index do 
    ... 
    end 
end 

反正是有,我可以幹起來這代碼並在BaseApp中指定一次過濾器並讓它們以某種方式繼承?我明白這些過濾器是方法調用而不是方法。

謝謝!

回答

4

您可以使用標準是Sinatra擴展,lib下提出:

# lib/common_filters.rb 
module CommonFilters 
    def self.registered(app) 
    app.before do 
     ... 
    end 

    app.after do 
     ... 
    end 
    end 
end 

然後在你的應用程序:

# app/app.rb 
class MyApp < Padrino::Application 
    register CommonFilters 
end 
+0

謝謝,但不工作 - 'NoMethodError:未定義的方法 '過濾器=' 爲ClientsApp:Class' – 2012-02-03 14:42:58

+0

檢查更新代碼 – DAddYE 2012-02-03 18:29:00

+0

謝謝。更新後的代碼不會再引發錯誤,但是子類應用程序中的所有路由現在都會返回404,就好像路由被覆蓋/丟失或者其他情況一樣。任何其他想法? – 2012-02-06 16:42:12

相關問題